X-XSS-Protection 头
非标准:此特性未标准化。我们不建议在生产环境中使用非标准特性,因为它们浏览器支持有限,并且可能会更改或被移除。但是,在没有标准选项的特定情况下,它们可以是合适的替代方案。
已弃用:此特性不再推荐。虽然某些浏览器可能仍然支持它,但它可能已经从相关的网络标准中删除,可能正在删除过程中,或者可能仅为兼容性目的而保留。请避免使用它,如果可能,请更新现有代码;请参阅本页底部的兼容性表格以指导您的决策。请注意,此特性可能随时停止工作。
警告: 即使此功能可以保护不支持 CSP 的旧版网络浏览器用户,但在某些情况下,X-XSS-Protection 可能会在原本安全的网站中创建 XSS 漏洞。请参阅下面的安全注意事项部分以获取更多信息。
HTTP X-XSS-Protection 响应头是 Internet Explorer、Chrome 和 Safari 的一个功能,它会在检测到反射型跨站脚本 (XSS) 攻击时阻止页面加载。当网站实现强大的 Content-Security-Policy 以禁用内联 JavaScript ('unsafe-inline') 时,现代浏览器中这些保护措施在很大程度上是不必要的。
建议您使用 Content-Security-Policy 而不是 XSS 过滤。
语法
X-XSS-Protection: 0
X-XSS-Protection: 1
X-XSS-Protection: 1; mode=block
X-XSS-Protection: 1; report=<reporting-uri>
指令
0-
禁用 XSS 过滤。
1-
启用 XSS 过滤(通常在浏览器中默认启用)。如果检测到跨站脚本攻击,浏览器将清理页面(删除不安全的部分)。
1; mode=block-
启用 XSS 过滤。如果检测到攻击,浏览器将阻止页面渲染,而不是清理页面。
1; report=<reporting-URI>(仅限 Chromium)-
启用 XSS 过滤。如果检测到跨站脚本攻击,浏览器将清理页面并报告违规行为。这利用了 CSP
report-uri指令的功能来发送报告。
安全注意事项
XSS 过滤引起的漏洞
考虑以下网页的 HTML 代码片段
<script>
var productionMode = true;
</script>
<!-- [...] -->
<script>
if (!window.productionMode) {
// Some vulnerable debug code
}
</script>
如果浏览器不执行 XSS 过滤,此代码是完全安全的。但是,如果浏览器执行 XSS 过滤并且搜索查询是 ?something=%3Cscript%3Evar%20productionMode%20%3D%20true%3B%3C%2Fscript%3E,浏览器可能会执行页面中的脚本,而忽略 <script>var productionMode = true;</script>(认为服务器将其包含在响应中,因为它在 URI 中),导致 window.productionMode 被评估为 undefined 并执行不安全的调试代码。
将 X-XSS-Protection 头设置为 0 或 1; mode=block 可以防止上述漏洞。前者将使浏览器运行所有脚本,后者将完全阻止页面处理(尽管这种方法如果网站可以嵌入到 <iframe> 中,可能会容易受到 侧信道攻击)。
示例
检测到反射型 XSS 攻击时阻止页面加载
X-XSS-Protection: 1; mode=block
PHP
header("X-XSS-Protection: 1; mode=block");
Apache (.htaccess)
<IfModule mod_headers.c>
Header set X-XSS-Protection "1; mode=block"
</IfModule>
Nginx
add_header "X-XSS-Protection" "1; mode=block";
规范
不属于任何规范或草案。
浏览器兼容性
加载中…