插件窝 干货文章 Nginx反向代理中的HTTP响应头攻击与防御

Nginx反向代理中的HTTP响应头攻击与防御

header Control add Content 362    来源:    2025-04-20

Nginx反向代理中的HTTP响应头攻击与防御

常见HTTP响应头攻击类型

  1. HTTP响应头注入攻击

    • 攻击者通过注入恶意头信息,可能导致XSS、缓存污染等安全问题
  2. 敏感信息泄露

    • Server、X-Powered-By等头暴露服务器信息
    • 可能泄露内部IP、版本号等敏感信息
  3. 安全头缺失

    • 缺少CSP、X-Frame-Options等重要安全头
    • 增加点击劫持、XSS等攻击风险
  4. CORS配置不当

    • Access-Control-Allow-Origin设置过于宽松
    • 可能导致CSRF攻击

Nginx防御配置方案

1. 移除敏感头信息

server {
    # 移除服务器标识头
    server_tokens off;

    # 移除特定响应头
    proxy_hide_header X-Powered-By;
    proxy_hide_header Server;
}

2. 添加安全头

server {
    # 防止点击劫持
    add_header X-Frame-Options "SAMEORIGIN";

    # XSS防护
    add_header X-XSS-Protection "1; mode=block";

    # 禁用内容类型嗅探
    add_header X-Content-Type-Options "nosniff";

    # 内容安全策略
    add_header Content-Security-Policy "default-src 'self'; script-src 'self' 'unsafe-inline' 'unsafe-eval' https://trusted.cdn.com;";

    # 推荐的安全头
    add_header Referrer-Policy "no-referrer-when-downgrade";
    add_header Feature-Policy "geolocation 'none'; midi 'none'; sync-xhr 'none'; microphone 'none'; camera 'none'; magnetometer 'none'; gyroscope 'none'; speaker 'none'; fullscreen 'self'; payment 'none';";
}

3. 防止头注入

server {
    # 清理传入的请求头
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

    # 防止头注入
    proxy_set_header Accept-Encoding "";
    proxy_set_header Accept-Language "";
    proxy_set_header User-Agent "";

    # 只允许必要的头传递到后端
    proxy_pass_request_headers off;
    proxy_set_header Authorization $http_authorization;
    proxy_set_header Content-Type $content_type;
}

4. CORS安全配置

server {
    # 严格限制CORS
    add_header 'Access-Control-Allow-Origin' 'https://trusted.domain.com';
    add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
    add_header 'Access-Control-Allow-Headers' 'DNT,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range';
    add_header 'Access-Control-Expose-Headers' 'Content-Length,Content-Range';
    add_header 'Access-Control-Max-Age' 1728000;

    # 预检请求处理
    if ($request_method = 'OPTIONS') {
        add_header 'Access-Control-Allow-Origin' 'https://trusted.domain.com';
        add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
        add_header 'Access-Control-Allow-Headers' 'DNT,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range';
        add_header 'Access-Control-Max-Age' 1728000;
        add_header 'Content-Type' 'text/plain; charset=utf-8';
        add_header 'Content-Length' 0;
        return 204;
    }
}

5. 其他安全配置

http {
    # 禁用不安全的HTTP方法
    if ($request_method !~ ^(GET|HEAD|POST|PUT|DELETE|PATCH)$ ) {
        return 405;
    }

    # 防止MIME类型混淆攻击
    default_type application/octet-stream;

    # 限制缓冲区大小防止缓冲区溢出攻击
    client_body_buffer_size 16k;
    client_header_buffer_size 1k;
    client_max_body_size 8m;
    large_client_header_buffers 4 8k;
}

最佳实践建议

  1. 定期审计响应头:使用工具如Burp Suite或OWASP ZAP检查响应头
  2. 最小化头信息:只保留必要的头信息
  3. 保持Nginx更新:及时应用安全补丁
  4. 测试配置:部署前全面测试配置变更
  5. 监控异常:设置监控检测异常的响应头模式

通过以上配置,可以显著提高Nginx反向代理环境的安全性,减少HTTP响应头相关的攻击面。