5月27日 21:37

XSS 攻击有哪些危害?如何防范?

核心危害与防范

XSS(跨站脚本攻击)允许攻击者向页面注入恶意脚本,危害集中在三个层面:窃取凭据(Cookie、Session ID、Token)、操控用户行为(伪造请求、钓鱼、重定向)、破坏页面完整性(篡改内容、植入挖矿脚本)。

具体来说,攻击者通过 document.cookie 窃取会话信息后可劫持账户;注入伪造表单骗取密码;用 window.location 重定向到钓鱼站;监听 keydown 记录键盘输入;甚至用 fetch 携带 credentials:'include' 代发转账请求。DOM 型 XSS 还能直接修改页面 DOM,篡改显示内容。

系统性防御方案

防御的核心原则是不信任任何用户输入,具体分为四层:

输入层:白名单校验 + 长度限制,富文本场景用 DOMPurify 过滤危险标签和属性。

输出层:根据上下文选择编码方式——HTML 正文转义 <>&",属性值额外转义引号,URL 上下文做 URL 编码,JS 上下文做 Unicode 转义。优先用 textContent 替代 innerHTML

浏览器层:部署 CSP 策略,禁止内联脚本和外域脚本加载;Cookie 设置 HttpOnly 阻止 JS 读取、SameSite=Strict 防跨站携带;响应头加上 X-Content-Type-Options: nosniff

框架层:React/Vue 默认转义输出,避免 dangerouslySetInnerHTML / v-html;需要渲染 HTML 时必须先 sanitize。

追问

  • 存储型、反射型、DOM 型 XSS 的区别是什么? 存储型恶意脚本持久化在服务端,所有访问者触发;反射型脚本随 URL 参数传入,需诱骗点击;DOM 型纯前端触发,不经过服务端。
  • CSP 如何绕过? 若配置允许 unsafe-inlineunsafe-eval 则形同虚设;JSONP 接口可被利用加载外域脚本。
  • HttpOnly 能防 XSS 吗? 不能,只防 Cookie 读取,攻击者仍可通过 XSS 发起请求(借助浏览器自动携带 Cookie)。
标签:XSS