启用X-XSS-Protection可拦截基础反射型XSS,核心配置为add_header X-XSS-Protection "1; mode=block" always;需配合CSP、X-Content-Type-Options等头实现纵深防御。

直接在 Nginx 配置中添加 X-XSS-Protection 响应头,就能让主流浏览器启用内置的 XSS 过滤机制。这不是万能盾,但对基础反射型 XSS 有明显拦截效果。
核心配置:启用并强制阻断
在对应站点的 server 块或全局 http 块中加入:
add_header X-XSS-Protection "1; mode=block" always;
其中 "1; mode=block" 是关键组合:
-
1表示启用浏览器默认 XSS 过滤器 -
mode=block表示一旦检测到可疑脚本注入,直接停止页面渲染(而非尝试修复后继续加载) -
always确保即使返回 304 或错误状态码,该头依然生效
为什么不用其他值?
避免使用不安全或已失效的配置方式:
-
"0":完全禁用过滤器,等于放弃这层防护 -
"1"(无 mode):部分旧版浏览器可能仅“修复”而非阻断,存在绕过风险 -
"1; report=...":需后端配合接收报告,实际部署复杂且浏览器支持不一,非必需场景不推荐
搭配使用更有效
单独靠 X-XSS-Protection 不足以应对现代 XSS,建议同步配置以下响应头形成纵深防御:
-
add_header Content-Security-Policy "default-src 'self'; script-src 'self'; object-src 'none';" always;—— 从源头限制脚本执行范围 -
add_header X-Content-Type-Options "nosniff" always;—— 防止浏览器 MIME 类型嗅探导致误解析 -
add_header X-Frame-Options "SAMEORIGIN" always;—— 防止点击劫持类攻击干扰 XSS 防护逻辑
验证是否生效
配置保存后重载 Nginx(nginx -s reload),用浏览器开发者工具检查任意页面响应头:
- 打开 Network → 选中 HTML 请求 → 查看 Response Headers
- 确认存在
X-XSS-Protection: 1; mode=block - 可临时构造简单 XSS 测试 payload(如
<script>alert(1)</script>)观察是否被拦截(注意仅限测试环境)











