Django出现Invalid HTTP_HOST header告警,如何通过Nginx防范此类攻击?
Host头攻击的识别与防范
攻击名称
这是典型的Host头攻击(HTTP Host Header Attack),攻击者通过伪造HTTP请求中的Host头,尝试绕过服务器主机验证机制,可能用于钓鱼、缓存投毒、绕过CSRF防护,或是触发后端应用泄露错误信息(比如你收到的Sentry告警,就是后端框架因不识别伪造Host头抛出的提示)。
现有配置的补充优化
你已完成Nginx层面的两项配置,针对这类请求还需补充以下处理:
1. 严格校验转发头字段
攻击者伪造了Forwarded、X-Forwarded-For、X-Forwarded-Host等转发头,若后端应用信任这些字段,会导致源地址判断错误。需在Nginx中仅保留可信代理的转发头,或直接清理伪造字段:
# 仅保留真实客户端IP作为X-Forwarded-For,覆盖伪造值 proxy_set_header X-Forwarded-For $remote_addr; # 用Nginx识别的合法Host覆盖伪造的X-Forwarded-Host proxy_set_header X-Forwarded-Host $host; proxy_set_header X-Forwarded-Proto $scheme; # 清空Forwarded头,避免后端解析伪造内容 proxy_set_header Forwarded "";
2. 拦截空值请求头
攻击者发送了Content-Length、Content-Type、X-Real-Ip等空值头,这类畸形请求多来自扫描工具,可在Nginx中直接拦截:
if ($http_content_length = "") { return 444; } if ($http_content_type = "") { return 444; } if ($http_x_real_ip = "") { return 444; }
3. 后端应用层面加固
不要仅依赖Nginx防护:
- 严格配置后端框架的
ALLOWED_HOSTS(如Django、Flask),绝对不能将未知Host加入列表; - 关闭应用调试模式,防止错误信息泄露敏感配置。
4. 拦截异常User-Agent
攻击者使用的User-Agent: Report Runner属于非常见客户端标识,可在Nginx中拦截这类异常UA:
if ($http_user_agent ~* "Report Runner") { return 444; }
额外建议
- 配置SSL证书时仅绑定自有域名,避免泛域名证书被滥用;
- 开启Nginx完整访问日志,记录所有请求头信息,便于攻击溯源;
- 定期更新Nginx和后端应用版本,修复已知的头解析漏洞。
内容的提问来源于stack exchange,提问作者mirana
相关产品推荐
相关产品推荐

