- 什么是XSS
- XSS原理
- XSS危害
- XSS攻击 (攻击分类与举例)
- XSS防御
- XSS检测
引用自 wiki
跨站脚本(英语:Cross-site scripting,通常简称为:XSS)是一种网站应用程序的安全漏洞攻击,是代码注入的一种。它允许恶意用户将代码注入到网页上,其他用户在观看网页时就会受到影响。这类攻击通常包含了HTML以及用户端脚本语言。
攻击者,利用网站开发的漏洞,将恶意代码,与网站正常的代码混在一起;浏览器无法分辨哪些脚本是可信的,导致恶意脚本被执行,从而达到攻击者的目的。
恶意代码的可能来源:
- 用户 UGC 内容 (UGC 互联网术语,全称为User Generated Content,也就是用户生成内容)
- 来自第三方的链接
- URL 参数
- POST 参数
- Referer(可能来自不可信的来源)
- Cookie(可能来自其他子域注入)
防御的关键就是对任何非可信来源的数据(可能包含有恶意代码)进行处理
- 盗取用户cookies信息
- 劫持用户浏览器
- 强制弹出广告页面、刷流量
- 网页挂马
- 进行恶意操作,例如任意篡改页面信息
- 获取客户端隐私信息等
XSS 攻击可以分为3类:存储型(持久型)、反射型(非持久型)、DOM 型。
-
存储型 XSS 注入型脚本永久存储在目标服务器上。当浏览器请求数据时,脚本从服务器上传回并执行。
-
反射型 XSS 当用户点击一个恶意链接,或者提交一个表单,或者进入一个恶意网站时,注入脚本进入被攻击者的网站。Web服务器将注入脚本,比如一个错误信息,搜索结果等 返回到用户的浏览器上。由于浏览器认为这个响应来自"可信任"的服务器,所以会执行这段脚本。
-
基于 DOM 的 XSS 通过修改原始的客户端代码,受害者浏览器的 DOM 环境改变,导致有效载荷的执行。也就是说,页面本身并没有变化,但由于DOM环境被恶意修改,有客户端代码被包含进了页面,并且意外执行。
DOM 型 XSS 攻击,实际上就是网站前端 JavaScript 代码本身不够严谨,把不可信的数据当作代码执行了。
- 将重要的 cookie 标记为 http only
- 对任何非信任来源数据进行编码处理(前后端使用统一的编码库)
- CSP: Content-Security-Policy (内容安全策略)
注意:如果用 Vue/React 技术栈,并且不使用 v-html/dangerouslySetInnerHTML 功能,就在前端 render 阶段避免 innerHTML、outerHTML 的 XSS 隐患。
一定要确保 dangerouslySetInnerHTML 里面的内容来自可信任的来源。(例如来自后端信息)
- 使用通用 XSS 攻击字符串手动检测 XSS 漏洞。
- 使用扫描工具自动检测 XSS 漏洞。
参考资料: