# 跨站脚本攻击
# 分类
# 反射型XSS
当用户点击一个恶意链接,或者提交一个表单,或者进入一个恶意网站时,注入脚本进入被攻击者的网站。Web服务器将注入脚本,比如一个错误信息,搜索结果等 返回到用户的浏览器上。由于浏览器认为这个响应来自"可信任"的服务器,所以会执行这段脚本。
通常需要诱导用到点击恶意链接。
比如URL是这样:a.com?search=<script>alert(xss)</script>,应用程序(无论是服务器端还是客户端)读取url中的search字段,然后渲染到页面上,就会调用script中的内容。
# 存储型XSS
注入型脚本永久存储在目标服务器上。当浏览器请求数据时,脚本从服务器上传回并执行。
常见例子是黑客上传含有恶意代码的博客,然后博客被存储到数据库,其他用户访问时会运行恶意代码。
# 基于 DOM 的 XSS
这种类型的XSS其实是属于反射型XSS,但是由于比较特殊试图修改DOM结构,因此单独列出来。
# XSS攻击方式
- cookie劫持。XSS注入脚本,该脚本获取用户的cookie然后存储到黑客的服务器端,利用cookie伪造身份
- 发起GET、POST请求
- XSS钓鱼。例如注入的脚本伪造登录框要求用户输入密码
- 识别用户浏览器信息、插件信息。用来收集用户信息,为以后攻击做准备。
- 插入base标签,劫持当前页面所有使用相对路径的标签
# xss防御
- HttpOnly。预防cookie劫持
- 输入校验。客户端和服务器端对用户输入内容进行校验,检查特殊字符。针对富文本可以采用白名单机制,只允许特定标签。
- 输出检查。对输出到页面上的内容进行转义处理