Nginx 主机头注入攻击与防御

Nginx 主机头注入攻击与防御指南

一、攻击原理与危害

主机头注入攻击通过篡改 HTTP 请求的 Host 头字段,诱导服务器处理非法请求,主要危害包括:

  • 缓存污染‌:攻击者将恶意内容注入缓存,影响其他用户访问‌;
  • 敏感信息泄露‌:服务器可能返回与伪造 Host 头关联的敏感数据‌;
  • 钓鱼攻击‌:伪造合法域名诱导用户访问恶意站点‌。

二、防御方案与配置示例

1. 严格校验 Host 头合法性‌
在 Nginx 配置中强制校验 Host 头,拦截非法请求:

# 默认 server 块处理未匹配的 Host  
server {  
    listen 80 default_server;  
    server_name _;  
    return 403;  # 或 return 444 直接断开连接  
}  

# 合法业务 server 块  
server {  
    listen 80;  
    server_name example.com 192.168.1.32;  
    
    # 正则匹配合法 Host 值  
    if ($http_host !~* ^(example\.com|192\.168\.1\.32)$) {  
        return 403;  
    }  
    # 业务逻辑...  
}  
  • 关键点‌:
    • 通过 default_server 拦截所有未明确允许的 Host 头‌;
    • 使用正则表达式限制合法域名/IP,避免模糊匹配漏洞‌。

2. ‌反向代理场景固定 Host 头‌
当 Nginx 作为反向代理时,禁止透传客户端原始 Host 头:

location / {  
    proxy_pass http://backend;  
    proxy_set_header Host $host;       # 固定为当前 server_name  
    proxy_set_header X-Real-IP $remote_addr;  
    # 其他代理配置...  
}  
  • 说明‌:proxy_set_header Host $host 覆盖客户端输入,防止后端服务接收伪造 Host 头‌。

3. ‌过滤 Host 头中的特殊字符‌
拦截包含注入特征的非法字符(如分号、括号):

# 正则匹配非法字符  
if ($http_host ~* "[;'()<>]") {  
    return 403;  
}  
  • **作用‌:**阻止通过特殊字符绕过 Host 校验‌。

4. ‌集成安全模块增强防御‌

  • WAF 模块(如 ModSecurity)‌:通过规则库检测异常 Host 头,支持复杂逻辑拦截‌;
  • Lua 脚本动态校验‌:扩展 Nginx 功能,自定义 Host 头校验逻辑(如黑白名单、频率限制)‌。

三、注意事项‌

  1. 语法规范‌: Nginx 配置中 if 指令需与条件语句保留空格,避免语法错误导致配置失效‌;
  2. 配置验证‌: 每次修改后执行 nginx -t 检查语法,并通过 nginx -s reload 重载配置‌;
  3. 多层级防护‌:
    • 结合 CDN 或防火墙过滤非法 IP 和流量‌;
    • 定期审计 Host 头日志,发现异常请求模式‌。

通过上述措施,可有效阻断主机头注入攻击,同时保障业务的高可用性与安全性‌。