HTTP响应头注入攻击
敏感信息泄露
安全头缺失
CORS配置不当
server {
# 移除服务器标识头
server_tokens off;
# 移除特定响应头
proxy_hide_header X-Powered-By;
proxy_hide_header Server;
}
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';";
}
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;
}
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;
}
}
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;
}
通过以上配置,可以显著提高Nginx反向代理环境的安全性,减少HTTP响应头相关的攻击面。