在腾讯实习生面试的时候被问到Web安全,发现自己不是很了解,在此简单记录一下常见的一些Web安全知识。

Web从业者和网安从业者都需要对Web安全有一定了解,常见的Web攻击方式有XSS、SQL注入、DDOS、CSRF等,其中有一部分在ctf比赛中也会有所接触。

OWASP TOP10

OWASP TOP10这个榜单的描述感觉挺抽象的,2017版如下,但在面试的时候最好不要全盘托出

1
2
3
4
5
6
7
8
9
10
A1 注入 Injection
A2 失效的身份认证
A3 敏感信息泄露
A4 XML外部实体(XXE)
A5 失效的访问控制
A6 安全配置错误
A7 跨站脚本(XSS)
A8 不安全的反序列化
A9 使用含有已知漏洞的组件
A10 不足的日志记录和监控

我的面试回答:

这个榜单我记不大全了,但我可以按照我的理解大概梳理一下常见的WEB安全问题,大概有注入(包括SQL注入、OS注入等)、身份信息验证(比如中间人攻击这种对握手阶段的攻击)、XSS攻击、CSRF攻击、以及一些安全配置问题,比如使用含有漏洞的框架等等。

XSS

XSS简介

XSS攻击:跨站脚本攻击(Cross-Site Scripting)是指攻击者往Web页面中插入恶意的Script代码,当其他用户浏览该页面是,恶意代码就会执行,从而达到攻击用户的目的。

一般xss漏洞是通过php的输出函数将js代码输出到html页面,通过用户本地浏览器进行执行。

XSS漏洞分类

XSS漏洞一般分为两类:

  • 存储型XSS(持久化):主要出现在让用户输入数据,供其他浏览此页的用户进行查看的地方,包括留言、评论、博客日志和各类表单等,攻击者在相关页面输入脚本代码,当其他用户访问时,服务器会从数据库中查询到该代码并发送给其他用户的浏览器。
  • 反射型XSS(非持久化):将脚本代码加入URL中,需要欺骗用户去点击链接才会触发脚本。

XSS实战

防御方法

  • 过滤特殊字符:对用户输入的内容中的敏感字段进行过滤,比如<script>标签等
  • 使用HTTP头指定数据类型,比如指定为"text/javascript",就可以让浏览器来解析js代码

SQL注入

SQL注入简介

攻击者向服务器提交恶意的SQL查询代码,程序在接收到后错误地将输入当做查询语句的一部分进行执行,导致原始的查询逻辑被改变。

举例:OR '1'='1',当我们进行登录的时候把这段字符串作为password,就可能直接绕过SQL查询时对password的校验。

防御方法

  • 对sql语句进行预编译,这样的话即使攻击者伪造了参数,到服务端时这些参数都会被当做字符处理
  • 对输入的特殊字符进行正则匹配等过滤方法
  • 在后端进行转义或者编码转换

DDOS

DDOS简介

DDOS全称 Distributed Denial of Service,中文意思为 “分布式拒绝服务”,就是利用大量合法的分布式服务器对目标发送请求,从而导致正常合法用户无法获得服务。

DDOS分类

资源消耗类攻击

资源消耗类DDOS是比较典型的DDOS攻击,通过大量请求消耗正常的带宽和协议栈处理资源的能力,从而达到服务端无法正常工作的目的。最具代表性的有Syn Flood、Ack Flood、UDP Flood

Syn Flood

Syn Flood 是当前网络上常见的 DDoS 攻击,攻击者会向网络服务所在的端口发送大量伪造的大量的 SYN 包,并且缺少三次握手的最后一步握手 ACK 回复,造成目标服务器中的半连接队列被占满,从而阻止其他合法用户进行访问。

Ack Flood

在TCP连接建立后,所有的TCP报文都带有ACK标志位,服务器收到带有ACK标志位的数据包后悔进行查表检查该数据包所表示的连接四元组是否存在,来判断该数据包是否合法,如果不合法则需要回应RST包。攻击者在进行Ack Flood攻击时会发送大量非法的带有ACK标志位的数据包,而服务器需要进行查表和回应RST包,这就造成了服务器资源被占用,Ack Flood危害一般小于Syn Flood。

服务消耗性攻击

服务消耗性攻击主要是针对服务的特点进行精确定点打击,比如文件下载,数据检索等接口

Web的CC攻击

CC(Challenge Collapsar)就是模拟多个用户,多少线程就是多少用户,不停地进行访问那些需要大量数据操作,就是需要大量CPU时间的页面,造成服务器资源的浪费,CPU长时间处于100%,永远都有处理不完的连接直至就网络拥塞,正常的访问被中止。

反射类攻击

反射攻击也叫放大攻击,该类攻击以UDP协议为主,一般请求回应的流量远远大于请求本身流量的大小。攻击者通过流量被放大的特点以较小的流量带宽就可以制造出大规模的流量源,从而对目标发起攻击。

防御方法

  • 对流量进行检测与拦截
  • 可以引申出nmap

Nmap

nmap是一个网络连接端扫描软件,用来扫描网上电脑开放的网络连接端。确定哪些服务运行在哪些连接端,并且推断计算机运行哪个操作系统(通过指纹判断)。

nmap扫描使用的数据包都是自行构建的,在流量层面有一定的特征,可以根据这些特征检测出是否有主机被nmap进行扫描,并及时阻断。

CSRF

CSRF简介

CSRF(Cross-site request forgery),中文名称:跨站请求伪造,也被称为:one click attack/session riding,缩写为:CSRF/XSRF。

用大白话解释解释就是在你访问恶意站点A的时候,A让你去访问一次网站B,你在访问B的时候浏览器会自动带上你之前访问A所留下的cookie,这样恶意网站A就可以模拟用户的操作了。

防御方法

同源策略

同源策略是保障浏览器安全的一种重要的安全策略,他要求不同源的客户端脚本在没有明确授权的情况下,不能读写对方资源。而同源策略在我们进行Web开发时会导致跨域问题。

Hash验证

在表单中增加对Cookie的Hash,来保证请求是由客户端发送的。但由于用户的Cookie可能被XSS攻击等方式获取到,所以这种方法无法完全保证安全。

验证码

用户登录需要填写验证码,这个方案很不方便

参考资料