目录
XSS 攻击全称跨站脚本攻击,为了不和层叠样式表(Cascading Style Sheets, CSS)的缩写混淆,故将跨站脚本攻击缩写为 XSS, XSS 是一种在 web 应用中的计算机安全漏洞,它允许恶意 web 用户将代码植入到提供给其它用户使用的页面中。(任何用户输入都是不可信的)
分类
反射型
只是简单地把用户输入的数据 “反射” 给浏览器, 反射型 XSS 也叫“非持久型 XSS”(Non-persistent XSS)。
比如:直接将用户输入用于网站页面,URL 中的 Query, Params 或者 用户输入的信息直接拼接 DOM 节点等
<a href="http://localhost:3000/?name=<script>alert('hello')</script>" >点击进入网站并进行XSS攻击</a >
& & < < > > " " ' Ƈ
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25如果目标网站直接将 url 中的 query.name 渲染到页面上,就会被攻击
### 存储型
- 存储型 XSS 会把用户输入的数据“存储”在服务器端(数据库)。存储型 XSS 通常也叫做“持久型 XSS”(Persistent XSS)
- 比如:用户发表的文章或评论中,可以输入恶意代码,发表成功存入数据库之后每个用户访问该文章或评论时,都会调用恶意代码,被劫持。
## 防御
常见的 Web 漏洞如 XSS,SQL 注入等,都要求攻击者输入一些特殊字符,所以可以通过输入检查,过滤掉这些字符。
- React、Vue 等都有对 XSS 进行处理
- React `dangerouslySetInnerHTML` 会有风险
- Vue `v-html` 会有风险
- GitHub 上有比较成熟的 XSS 库,可参考 [GitHub - XSS](https://github.com/leizongmin/js-xss)
- 防止 Cookie 被劫持
Cookie 中设置 HttpOnly 之后,JS 将无法读取 Cookie 信息
- 对下列特殊字符进行过滤或者编码,可以简单的防范