XSS攻击防御全指南:核心防护技巧
以下是针对 XSS(跨站脚本攻击)的防范方法,基于最新技术实践整理,按核心防御层级分类:
🔒 一、输入层防护
-
输入验证与过滤
- 白名单校验:仅允许安全的字符类型(如字母、数字),过滤
<>'"&
等特殊符号。 - 格式限制:对邮箱、电话等字段强制格式验证(如正则匹配)。
示例:用户输入
alert(1)
→ 过滤后转为空或安全文本。 - 白名单校验:仅允许安全的字符类型(如字母、数字),过滤
-
富文本处理(如评论、编辑器)
- 使用 DOMPurify 等库,仅保留安全的 HTML 标签和属性(如保留
<b>
但移除<script>
)。
- 使用 DOMPurify 等库,仅保留安全的 HTML 标签和属性(如保留
📤 二、输出层防护
-
上下文相关编码
输出位置 编码规则 示例 HTML 正文 转义 <
>
&
"
'
→<
>
&
"
'
"<script>"
→<script>
HTML 属性 同上,并确保属性值用引号包裹 <div attr=输入值>
→<div attr="安全值">
JavaScript 使用 \uXXXX
Unicode 转义或 JSON.stringifyvar x="输入值"
→var x="\u003cscript\u003e"
URL 编码 %XX
格式(如encodeURIComponent()
)?redirect=javascript:alert(1)
→ 阻断执行 -
避免危险 API
- 禁用
innerHTML
、document.write()
等直接写入 HTML 的 API,改用textContent
。
- 禁用
🛡️ 三、浏览器层加固
- 内容安全策略(CSP)
- 通过 HTTP 头限制资源加载来源:
Content-Security-Policy: default-src 'self'; script-src 'self' https://trusted.cdn.com;
- 禁止内联脚本(
unsafe-inline
)和eval()
。
- 禁止内联脚本(
- 通过 HTTP 头限制资源加载来源: