跨站脚本(XSS)是一种安全漏洞,允许攻击者向网站注入恶意客户端代码。该代码由受害者执行从而让攻击者绕过访问控制并冒充用户。根据开放 Web 应用程序安全项目(Open Web Application Security Project),XSS 是 2017 年第七大常见 Web 应用程序漏洞。
如果 Web 应用程序没有充足的校验或加密,这些攻击就会成功。用户的浏览器无法检测到恶意脚本是否不可信,因此会授予其访问任何 cookie、会话令牌或其他敏感站点特定信息的权限,或者让恶意脚本重写 HTML 内容。
跨站脚本攻击通常在以下情况中发生:1) 数据通过不受信任的来源(通常是 Web 请求)进入 Web 应用程序,或者 2) 动态内容未经恶意内容验证就发送给 Web 用户。
恶意内容通常包括 JavaScript,但有时也包括 HTML、Flash 或浏览器可以执行的任何其他代码。基于 XSS 的攻击种类几乎是无限的,但它们通常包括向攻击者传输 Cookie 等隐私数据或其他会话信息、将受害者重定向到攻击者控制的网页,或者以易受攻击的站点为幌子在用户的计算机上执行其他恶意操作。
XSS 攻击可以分为三类:存储(也称为持久)、反射(也称为非持久)或基于 DOM。
存储型 XSS 攻击
注入的脚本永久存储在目标服务器上。当浏览器发送数据请求时,受害者会从服务器接收到该恶意脚本。
反射型 XSS 攻击
当用户被诱骗点击恶意链接、提交特制表单或浏览恶意网站时,注入的代码就会传输到易受攻击的网站。Web 服务器将注入的脚本传回用户的浏览器,例如在错误消息、搜索结果或包含作为请求的一部分发送到服务器的数据的任何其他响应中。浏览器执行恶意代码是因为它假设来自用户已经与之交互的服务器的响应是“可信”的。
基于 DOM 的 XSS 攻击
其是指通过修改原始客户端脚本所使用的 DOM 环境(在受害者浏览器中)而执行的。也就是说,页面本身没有改变,但是页面中包含的客户端代码由于对 DOM 环境的恶意修改而以期望之外的方式运行。