当前位置: 首页 > news >正文

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

以下是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. 限制缓存时间‌
通过Access-Control-Max-Age减少预检请求频率,但需根据业务需求设置合理有效期(单位:秒)‌:

add_header Access-Control-Max-Age 3600;

3‌. 添加Vary头‌
避免缓存因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。

相关文章:

  • 数据库的操作
  • VScode 画时序图(FPGA)
  • 开源RuoYi AI助手平台的未来趋势
  • 软件学报 区块链论文 截止2025年4月 录用汇总 附pdf下载
  • 【力扣hot100题】(061)N皇后
  • 修改maya小部件操作器(manipulator,那个带有箭头和圆环的小部件坐标轴)
  • R语言——绘制生命曲线图(细胞因子IL5)
  • 【力扣hot100题】(060)分割回文串
  • PyTorch 深度学习 || 7. Unet | Ch7.1 Unet 框架
  • 【学习笔记17】Windows环境下安装RabbitMQ
  • 云服务器数据安全实践:基于 Rsync + 宝塔计划任务构建全站自动备份系统
  • Nginx 常见面试题
  • MySQL——DQL的单表查询
  • Kafka 的选举机制
  • Python高级爬虫之JS逆向+安卓逆向1.1节-搭建Python开发环境
  • Leetcode 311 Sparse Matrix Multiplication 稀疏矩阵相乘
  • [特殊字符] LeetCode 1123. 最深叶节点的最近公共祖先 | DFS后序遍历题解
  • C# System.Text.Json 中 JsonConverter 使用详解
  • 智能指针【C++】
  • Android Compose入门和基本使用
  • 公司网站建设设计公司/百度关键词分析工具
  • 兰州企业网站排名优化/百度搜索关键词排名优化推广
  • wordpress 图片域名/资源优化排名网站
  • 做海报兼职网站/有什么好用的搜索引擎
  • 深圳设计网站费用/谷歌搜索入口
  • 有什么做海报网站/建网站平台