核心是控制头字段的发送与校验:禁用泄露指纹的响应头(如server、x-powered-by),严格白名单校验host头防注入,主动设置hsts、csp、x-content-type-options等防护型安全头,并禁用options等高风险方法。

防御HTTP协议头劫持与注入攻击,核心不是“堵住所有头”,而是控制哪些头该发、哪些不该发,以及如何校验不可信头字段。重点在三方面:禁用或清理敏感响应头、严格校验请求头(尤其是Host)、主动设置防护型安全头。
禁用/移除泄露服务指纹的响应头
Server、X-Powered-By、X-AspNet-Version等头不提供业务功能,却直接暴露技术栈和版本,为攻击者提供靶向依据。IIS中可在web.config的<httpprotocol></httpprotocol>节点下移除:
-
<remove name="Server"></remove>(需配合注册表或ARR模块才真正隐藏) <remove name="X-Powered-By"></remove><remove name="X-AspNet-Version"></remove>
Tomcat用户应在conf/server.xml中将server属性设为空字符串:server="",并启用suppressStackTraces="true"。
拦截非法Host头,阻断Host头注入链路
Host头由客户端完全控制,若后端直接拼接生成重置链接、跳转URL或日志路径,极易导致密码重置劫持、开放重定向甚至SSRF。Nginx层应做白名单校验:
- 只允许预设域名(如
www.example.com、api.example.com)通过 - 对不匹配的Host直接返回
403 Forbidden,不交由后端处理 - 避免使用嵌套
if,推荐用map指令或单层if+标志位方式
示例配置(Nginx):
map $host $allowed_host {
default 0;
www.example.com 1;
api.example.com 1;
}
server {
if ($allowed_host = 0) { return 403; }
# 其余配置...
}主动设置关键防护型HTTP安全头
这不是“防泄露”,而是构建纵深防御。以下头部应作为默认标配写入响应:
-
Strict-Transport-Security:强制HTTPS,防中间人降级,建议值
max-age=31536000; includeSubDomains; preload - X-Content-Type-Options: nosniff:禁止MIME类型嗅探,防JS/CSS误解析执行
- X-Frame-Options: DENY 或 Content-Security-Policy: frame-ancestors 'none':防点击劫持(后者兼容性更好)
- Content-Security-Policy:限制脚本、样式、iframe等资源加载来源,是XSS和数据注入的强力屏障
禁用高风险HTTP方法与调试头
OPTIONS方法会返回Allow头,暴露支持的动词(如PUT、TRACE),还常附带Server等指纹信息。IIS中可在web.config的<requestfiltering></requestfiltering>中关闭:
- 设置
allowUnlisted="false",再显式只放行GET、POST、HEAD - 同时移除
X-Powered-By等调试类头,避免开发环境配置泄漏到生产
注意:禁用OPTIONS不影响现代浏览器跨域预检——预检失败时自动降级为简单请求(只要满足CORS简单请求条件)。











