Nginx日志中的CSRF攻击防范
一 处置流程与日志识别
203.0.113.10 - - [29/Dec/2025:10:12:33 +0000] "POST /api/transfer HTTP/2.0" 403 123
Referer: https://evil.example/
Origin: https://evil.example
X-CSRF-Token: <missing>
二 Nginx侧可落地的加固配置
location / {
if ($request_method !~ ^(GET|HEAD|POST)$) {
return 405;
}
add_header X-Frame-Options "SAMEORIGIN" always;
add_header X-XSS-Protection "1; mode=block" always;
add_header X-Content-Type-Options "nosniff" always;
}
# 仅允许本站来源(按需调整域名与协议)
valid_referers none server_names example.com www.example.com;
if ($invalid_referer) {
return 403;
}
# 或按 Origin 白名单放行(API常用)
if ($http_origin !~* ^https://(www\.)?example\.com$) {
return 403;
}
location /api/transfer {
if ($request_method != POST) { return 405; }
set $token "YOUR_STRONG_SECRET"; # 生产环境应由应用生成与校验
if ($http_x_csrf_token != $token) {
return 403;
}
# proxy_pass ...
}
# 为后端Set-Cookie追加 Secure; HttpOnly; SameSite=Lax
proxy_cookie_path / "/; Secure; HttpOnly; SameSite=Lax";
# 全站强制HTTPS与HSTS(max-age单位:秒)
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always;
add_header Referrer-Policy "origin" always;
add_header X-Permitted-Cross-Domain-Policies "none" always;
add_header X-Download-Options "noopen" always;
以上配置分别体现了来源校验、Token校验、Cookie安全与传输安全等要点,可与应用侧CSRF机制协同使用。
三 应用侧与架构层的关键措施
四 监控 响应与验证