插件窝 干货文章 Nginx服务器的跨站请求伪造(CSRF)和跨站脚本攻击(XSS)防范技巧

Nginx服务器的跨站请求伪造(CSRF)和跨站脚本攻击(XSS)防范技巧

Nginx header 配置 安全 591    来源:    2025-04-13

Nginx服务器防范CSRF和XSS攻击的全面指南

一、跨站请求伪造(CSRF)防范

1. 使用SameSite Cookie属性

add_header Set-Cookie "Path=/; HttpOnly; Secure; SameSite=Strict";

2. 验证Referer头

location / {
    if ($http_referer !~* ^https://(www\.)?yourdomain\.com/) {
        return 403;
    }
    # 其他配置...
}

3. 添加CSRF令牌

虽然令牌生成通常在应用层实现,但Nginx可以协助验证:

location /api/ {
    if ($request_method = POST) {
        set $csrf_check "fail";
        if ($http_x_csrf_token = $cookie_csrf_token) {
            set $csrf_check "pass";
        }
        if ($csrf_check = "fail") {
            return 403;
        }
    }
}

二、跨站脚本攻击(XSS)防范

1. 设置安全相关的HTTP头

add_header X-XSS-Protection "1; mode=block";
add_header X-Content-Type-Options "nosniff";
add_header X-Frame-Options "SAMEORIGIN";
add_header Content-Security-Policy "default-src 'self'; script-src 'self' 'unsafe-inline' 'unsafe-eval' https://trusted.cdn.com; img-src 'self' data:; style-src 'self' 'unsafe-inline'";

2. 输入过滤和输出编码

虽然主要在应用层实现,但Nginx可以协助过滤:

location / {
    # 防止SQL注入和XSS尝试
    if ($args ~* "(<|%3C).*script.*(>|%3E)") {
        return 403;
    }
    if ($query_string ~* "union.*select.*\(") {
        return 403;
    }
}

3. 禁用危险HTTP方法

location / {
    if ($request_method !~ ^(GET|HEAD|POST)$ ) {
        return 405;
    }
}

三、综合安全配置

1. 基础安全加固

server_tokens off;  # 隐藏Nginx版本信息

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

2. SSL/TLS配置

ssl_protocols TLSv1.2 TLSv1.3;
ssl_prefer_server_ciphers on;
ssl_ciphers 'ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256';
ssl_session_timeout 1d;
ssl_session_cache shared:SSL:50m;
ssl_session_tickets off;

3. 防止点击劫持

add_header X-Frame-Options "SAMEORIGIN" always;

四、定期维护建议

  1. 保持Nginx更新:定期升级到最新稳定版本
  2. 审计配置:定期检查Nginx配置和访问日志
  3. 监控异常:设置警报监控异常请求模式
  4. 限制访问:使用Nginx的allow/deny指令限制敏感路径访问

五、注意事项

  1. 某些严格的安全策略可能会影响合法功能,需根据实际业务调整
  2. 在生产环境部署前应在测试环境充分验证
  3. 安全配置应与应用层安全措施(如输入验证、输出编码)配合使用

这些配置可以显著提高Nginx服务器的安全性,但安全是一个持续的过程,需要定期审查和更新防护措施。