对Web应用的攻击模式可分为主动攻击和被动攻击
一、主动攻击
主动攻击是指攻击者通过直接访问Web应用,把攻击代码传入的攻击模式
具有代表性的是SQL注入攻击和OS命令注入攻击
二、被动攻击
被动攻击是指利用圈套策略执行攻击代码的攻击模式
具有代表性的是跨站脚本攻击和跨站请求伪造。
三、跨站脚本攻击(XSS)
XSS的实质其实是HTML与Javascript代码的注入
从攻击方式可分为持久型和非持久型
1、持久型
- 攻击者将恶意代码提交到目标服务器上
- 客户端访问目标网站,服务器返回含有恶意脚本的页面
- 客户端浏览器收到后解析页面,执行恶意脚本
因为恶意代码存在于服务器上,所以任何访问该页面的用户都会受到攻击,是最危险的一种跨站脚本
2、非持久型
- 攻击者构造出包含恶意代码的特殊URL
- 用户被诱导打开/点击URL
- 恶意脚本被执行
持久型与非持久型最大的区别在于恶意代码存放的位置不同
前者的恶意代码存在于服务器中,而后者的恶意代码存在于URL或者页面的DOM结构中(直接在URL后面拼接script标签,或者利用一些DOM属性获取用户的输入/信息)
四、XSS的危害
- 窃取用户Cookie
- 劫持用户会话,从而执行进一步操作(发送电子邮件、非法转账等)
- 强制弹出广告页面
- ......
五、XSS的防御方法
1、X-XSS-Protection
X-XSS-Protection属于HTTP响应报文的首部字段
当指定字段值为0时,禁止XSS过滤
当指定字段值为1时,启用XSS过滤
2、HttpOnly
Set-cookie字段属于HTTP响应报文的首部字段
当为此字段设置了 HttpOnly之后,无法使用Javascript的document.cookie来劫持Cookie
3、过滤
需要对用户的输入进行处理,只允许用户输入合法值
4、转义
对HTML的一些特殊字符进行转义,例如:将尖括号转义为 < 和>
六、跨站请求伪造(CSRF)
CSRF是指 攻击者利用 已通过认证的用户身份 进行恶意操作
攻击步骤如下:
1、用户注册/登录至网站A
2、服务器验证通过后,在用户(浏览器)本地生成Cookie
3、用户在未退出A的前提下,打开/访问危险网站B
4、B在携带用户Cookie的情况下,对网站A发送恶意的GET或POST请求
七、CSRF的防御方法
1、验证Referer字段
Referer字段是HTTP请求报文的一个首部字段,用于记录该HTTP请求的来源地址
通常来说,Referer字段应和请求的地址位于同一域名下
而如果是CSRF攻击传来的请求,Referer字段会是包含恶意网址的地址
这种办法简单易行,工作量低,但是安全性不够高
因为无法保证浏览器没有安全漏洞影响到此字段,也无法避免攻击者攻击浏览器、篡改Referer字段
2、添加校验token
在发出访问敏感数据的请求时,要求用户浏览器提供 不保存在Cookie中、且攻击者无法伪造的数据 作为校验
这个数据通常是一个伪随机数
3、验证码
验证码强制用户与应用进行交互,才能完成最终请求
而CSRF无法获取验证码,也就无法通过服务器的验证