首页/安全/漏洞与攻击面速查/X-Content-Type-Options 与 MIME 嗅探防护
Web 漏洞原理与防护55 条

X-Content-Type-Options 与 MIME 嗅探防护

浏览器会嗅探资源实际类型,可能把声明为图片的文件当脚本执行;X-Content-Type-Options: nosniff 关闭嗅探,配合正确 Content-Type 降低脚本注入与下载欺骗面。

漏洞与攻击面速查安全更新于 2026-10-13

MIME 嗅探与 nosniff

浏览器历史上会忽略响应声明的 Content-Type,按内容特征猜测资源类型,于是声明为图片的上传文件可能被当作脚本执行。X-Content-Type-Options: nosniff 让浏览器严格按声明的类型处理,配合正确的 Content-Type,可以降低上传目录被用作脚本执行入口的风险。

基本信息

响应头X-Content-Type-Options: nosniff
生效范围现代浏览器(IE11 起广泛支持)
配套要求Content-Type 必须正确下发
常见场景上传目录、静态资源、下载文件
补充措施下载场景加 Content-Disposition: attachment

典型使用场景

  • 全局响应头:在 Web 服务器或应用中间件统一添加,覆盖所有响应
  • 上传目录:禁止脚本执行的 location 与 nosniff 一起配置
  • 下载接口:强制 attachment,避免浏览器内联渲染
  • CDN 与静态资源:确认 CDN 回源时保留了该响应头
  • 上线检查:用响应头检查工具核对各类型资源的实际返回值

Nginx 配置

Nginx 配置
add_header X-Content-Type-Options "nosniff" always;   # always 保证错误响应也带上
include mime.types;                                    # 依赖正确的类型映射
default_type application/octet-stream;                 # 未知类型按下载处理
location /uploads/ {
    location ~ \.(php|jsp|asp|aspx)$ { deny all; }      # 上传目录禁止脚本执行
}

其他层配置

其他层配置
Apache:Header set X-Content-Type-Options "nosniff"
IIS:在 HTTP 响应标头中添加 X-Content-Type-Options = nosniff
Node/Express:helmet 的 nosniff 中间件
Java:在过滤器中统一添加响应头
# 下载接口建议同时设置 Content-Disposition: attachment; filename=...

相关响应头与作用

响应头作用注意点
X-Content-Type-Options禁止类型嗅探需配合正确 Content-Type
Content-Type声明资源真实类型配置错误会导致资源无法加载
Content-Disposition指定内联或下载下载场景用 attachment
用户上传的文件在下载场景建议加 Content-Disposition: attachment,避免浏览器内联渲染;这条与 nosniff 配合,能把上传目录的脚本执行面压到最小。
只加 nosniff 而 Content-Type 配置缺失,部分资源会不再执行而是直接下载,容易被误判为兼容性故障:上线前应回归检查各类静态资源的加载情况。

验收检查

  • 用 curl -I 查看上传目录与静态资源目录的响应头,确认两类资源都带了该头
  • 上传一个扩展名与实际内容不一致的文件,确认浏览器按声明类型处理
  • 检查 CDN 回源后的最终响应,而不是只看源站配置

易错点

  • 只加 nosniff 而 Content-Type 配置缺失:部分资源浏览器不再执行但显示异常,容易被误判为兼容性故障
  • 依赖应用层添加响应头:静态资源由 Web 服务器直接返回时不会被覆盖,需要两层都配
  • 上传目录只加响应头不管执行权限:真正需要禁止的是脚本解析,响应头只是补充措施
  • CDN 回源丢弃响应头:源站加了但用户侧看不到,需实测验证最终响应

数据来源与参考

  • MDN X-Content-Type-Options 文档
  • OWASP Secure Headers Project
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌