XSS攻击

181 阅读2分钟

XSS(Cross Site Script)是指黑客通过“HTML注入”,篡改页面,注入恶意脚本。

根据效果的不同分为:

  1. 反射型XSS
  2. 存储型XSS
  3. DOM based XSS

反射型XSS(非持久型)

简单地把用户的输入直接“反射”给浏览器显示。

场景:

用户在输入框输入代码,开发者不对输入内容做处理,直接将输入插入到HTML中。

存储型XSS(持久型)

将用户的输入“存储”在服务器端。

场景:

黑客写含有JS代码的博客,博客发表,博客保存在了服务器,其他用户浏览该博客时,都会执行恶意的JS代码。

DOM based XSS

它和前两种按“是否存储在服务器”的划分不同,是反射型XSS的一种特例,开发者获取到用户的输入后,将页面的DOM进行修改,插入用户的输入信息造成的XSS称为DOM based XSS。

场景:

用户在输入框输入代码,开发者获取页面的某个DOM元素,将用户输入通过innerHTML插入到DOM中。

XSS Payload

XSS插入的恶意JS代码,可以做JS任何事情,比如造成“Cookie劫持”,构造GET,POST请求等。

1.cookie劫持

场景:用户登陆a.com网站,被植入XSS,通过document.cookie拿到用户登陆信息,然后模拟用户操作。

解决:

  • 可以将cookie与客户端ID绑定,使即使获取到cookie也无法模拟用户操作,因为换客户端后,登陆cookie失效
  • 设置HttpOnly标识,使JS无法读取

2.构造GET、POST请求

场景:可以植入一张图片构造GET请求,可以植入表单构造POST请求。

XSS的防御

1.“cookie劫持”

可以采用HttpOnly,或者cookie与客户端ID绑定

2.输入检查

对于输入检查,一般是检查用户输入的数据是否包含特殊字符,如<,>,',",/等。如果发现则进行编码或过滤。

3.输出检查

对于不同的使用语境,需要进行不同的编码,安全编码有很多,HTML使用HtmlEncode,JS使用JavascriptEncode,css使用CSSEncode,url使用URLEncode等。

4.处理富文本

应该禁止

白名单好处:

1.考虑到了安全标签

黑名单的坏处:

1.标签很多,无法考虑到所有标签的特性

2.浏览器的特性了解不全,可能会产生漏洞