跳转到主内容
趣航编程网 - 趣学编程,启航技术之路!

如何利用 add_header X-Content-Type-Options 增强资源加载安全

能有效阻止浏览器擅自“猜”资源类型,强制按服务器声明的Content-Type解析文件;它通过禁用MIME嗅探防范MIME混淆和XSS,要求script仅加载白名单JS类型、link仅加载text/css,并需在Nginx中正确配置add_header X-Content-Type-Options nosniff且避免覆盖。 直接设置
add_header X-Content-Type-Options nosniff
能有效阻止浏览器擅自“猜”资源类型,强制它只按服务器声明的
Content-Type
解析文件——这是防范 MIME 类型混淆和 XSS 的关键一步。 为什么这个 header 能增强加载安全 浏览器默认会对某些响应做 MIME 嗅探(比如把一个
text/plain
响应误判为
text/javascript
并执行),攻击者可能借此上传伪装成图片或文本的恶意脚本。启用
nosniff
后: script 标签只加载符合白名单 MIME 类型的资源(如
text/javascript
application/javascript
等) link 标签引入的样式表也必须是
text/css
,否则被拒绝 浏览器不再尝试从文件内容中“反推”类型,彻底切断这类绕过路径 Nginx 中正确配置 add_header 在 server 或 location 块内添加即可,注意两点:不能写错值,且需确保不被子配置覆盖: 写法必须是
add_header X-Content-Type-Options nosniff;
(无引号、无空格、全小写) 避免在多个 location 中重复添加,否则可能因 Nginx 的 header 合并规则导致失效 若使用 proxy_pass,需确认后端未覆盖该 header;必要时加
proxy_hide_header X-Content-Type-Options;
再由 Nginx 重写 哪些资源特别需要它 并非所有响应都同等敏感,以下几类务必启用: 用户可上传的静态资源(头像、附件、富文本中的图片等) 动态生成的 JSON/JSONP 接口(尤其旧系统仍用