跨域脚本攻击(XSS)是把恶意脚本注入 HTML 文件或 DOM 中,在用户浏览页面时实施攻击的一种手段。
一、恶意脚本能做什么?
- 窃取 Cookie 信息
document.cookie; // 输出:Gnahz=Test-Cookie
- 监听用户行为, addEventListener 接口监听键盘事件,比如获取输入的信用卡信息。
- 修改 DOM 伪造假的登录窗口,欺骗用户输入用户名和密码等信息。
- 在页面内生成浮窗广告。
二、如何攻击?常见的有三种注入方式:存储性 XSS 攻击、反射型 XSS 攻击和基于 DOM 的 XSS 攻击。
- 存储型 XSS 攻击
1、黑客利用站点漏洞将一段恶意的 JavaScript 代码提交到数据库中。
2、如果用户向网站请求了包含恶意脚本的页面。
3、浏览这页面时,恶意脚本就会把用户的 Cookie 信息等数据窃取上传到黑客的服务器。
- 反射型 XSS 攻击
1、用户将一段含有恶意代码的请求提交给 Web 服务器。
2、服务器受到请求后又将恶意代码反射给浏览器。
与存储型 XSS 攻击不同是:服务器不会存储反射 XSS 攻击的脚本。
现实场景:聊天群或邮箱诱导用户点击的恶意链接。
- 基于 DOM 的 XSS 攻击
不牵涉到 Web 服务器的攻击,通过各种手段将恶意脚本注入用户的页面中,比如通过网络劫持在页面传输过程中或使用页面过程中修改 HTML 页面的内容(通过 WiFi 路由器劫持、通过本地恶意软件劫持)
- 三者共同点:都需要往页面注入恶意脚本,获取用户数据。
- 三者不同点:注入方法不一样,存储型 XSS 攻击和放射型 XSS 攻击是服务器端的安全漏洞;而基于 DOM 的攻击是客户端
三、如何防范?
1、服务器对输入脚本过滤或转码
- 过滤 HTML