Nginx “Access-Control-Allow-Origin” 安全配置

06-01 1682阅读

以下是Nginx中安全配置“Access-Control-Allow-Origin”头的实践指南:

一、避免使用通配符(*)

‌1. 精确指定允许的域名‌

通过白名单限制允许跨域的域名,避免使用Access-Control-Allow-Origin *,以减少CSRF等安全风险‌。

示例:

add_header Access-Control-Allow-Origin "https://example.com";

‌2. 动态匹配多个域名‌

使用map模块根据请求的Origin动态返回允许的域名,提升灵活性‌:

map $http_origin $cors_origin {
    default "";
    "~^https?://(example\.com|sub.example\.net)$" $http_origin;
}
server {
    location / {
        add_header Access-Control-Allow-Origin $cors_origin;
    }
}

二、限制允许的HTTP方法及头部

‌1. 明确允许的请求方法‌

仅开放必要的HTTP方法(如GET, POST),而非默认允许所有方法:

add_header Access-Control-Allow-Methods "GET, POST, OPTIONS";
‌2. **指定允许的请求头‌**
按需开放自定义或敏感头部(如Authorization),避免泛用配置‌:
```nginx 
add_header Access-Control-Allow-Headers "Content-Type, Authorization";

三、预检请求(OPTIONS)处理

1‌. 返回204状态码‌

对OPTIONS请求直接返回204 No Content,避免触发实际业务逻辑‌68:

if ($request_method = 'OPTIONS') {
    return 204;
}

2‌. 避免重复添加头信息‌

确保在错误处理块(如error_page)中不重复设置跨域头,防止响应头冲突‌。

四、增强安全性补充配置

‌1. 控制凭据访问‌

若需携带Cookie等凭证,需显式设置Access-Control-Allow-Credentials并禁用通配符‌:

add_header Access-Control-Allow-Credentials "true";

‌2. 限制缓存时间‌

Nginx “Access-Control-Allow-Origin” 安全配置
(图片来源网络,侵删)

通过Access-Control-Max-Age减少预检请求频率,但需根据业务需求设置合理有效期(单位:秒)‌:

add_header Access-Control-Max-Age 3600;

3‌. 添加Vary头‌

Nginx “Access-Control-Allow-Origin” 安全配置
(图片来源网络,侵删)

避免缓存因Origin不同导致的错误响应‌:

add_header Vary "Origin";

五、完整配置示例

map $http_origin $cors_origin {
    default "";
    "~^https?://(example\.com|sub.example\.net)$" $http_origin;
}
server {
    location / {
        if ($cors_origin) {
            add_header 'Access-Control-Allow-Origin' $cors_origin;
            add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
            add_header 'Access-Control-Allow-Headers' 'Content-Type, Authorization';
            add_header 'Access-Control-Allow-Credentials' 'true';
            add_header 'Vary' 'Origin';
        }
        if ($request_method = 'OPTIONS') {
            return 204;
        }
    }
}

以上配置通过动态域名匹配、严格限制方法/头部、正确处理预检请求及补充安全头,实现既灵活又安全的CORS策略‌15。

Nginx “Access-Control-Allow-Origin” 安全配置
(图片来源网络,侵删)
免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们。

目录[+]

取消
微信二维码
微信二维码
支付宝二维码