NOTE
1.9 XSS
XSS 的原理、成因与输出编码等防御方式。
这是历史学习笔记,可能存在过时或不完整的理解。
1. XSS攻击是什么
一种Web攻击
比如用户A输入<script>alert(1)</script>,如果输出到 HTML 时没有按上下文进行正确编码的话,用户B打开就会一直弹窗
2. 为什么会发生XSS攻击
构成XSS的首要条件是:响应Content-Type类型为text/html,然后把用户的非法输入当作代码执行。
3. 如何防范XSS攻击
- 方案1:在输出位置按照 HTML、属性、URL、JavaScript 等上下文进行正确编码;优先使用默认自动转义的模板系统。
- 方案2:如果接口本来就不是 HTML,返回正确的
Content-Type,并可配合X-Content-Type-Options: nosniff。这不能替代 HTML 场景中的输出编码。
4. 实例
4.1. 非 HTML 接口
- Content-Type排除text/html,这样浏览器就不会以text/html方式来解析response,但是由于部分浏览器有Content-Sniff特性,仍会将该类接口作为HTML页面解析,所以得在http响应时加上header
X-Content-Type-Options: nosniff