Nginx配置origin限制跨域请求

按照等保要求,跨域的不安全性,需要修复。

在这里插入图片描述
这个需要根据客户端传递的请求头中的Origin值,进行安全的跨站策略配置,目的是对非法的origin直接返回403错误页面

漏洞复现

复现方式为在 Header 中指定 Origin 请求头,看是否可以请求成功。
能够请求成功,说明未对请求头进行控制,有漏洞。

curl -H 'Origin:http://test.com' http://192.168.15.32:80

修复办法

在http中定义一个通过map指令,定义跨域规则并返回是否合法

http {
    ...
    // 再白名单里边返回0,不在返回1
    map $http_origin $allow_cors {
        default 1;
        "~^https?://.*?\.tripwolf\.com.*$" 1;
        "~^(https?://(dmp.finerice.cn)?)$" 1;
        "~*" 0;
    }
    server {
        # 指定允许其他域名访问        
        add_header Access-Control-Allow-Origin $http_origin;
        # 允许的请求类型
        add_header Access-Control-Allow-Methods GET,POST,OPTIONS;
        # 许的请求头字段
        add_header Access-Control-Allow-Headers "Origin, X-Requested-With, Content-Type, Accept";

        location / {
            # 进行请求拦截
            if ($allow_cors = 0){
                return 403;
            }
            root /mnt/data;
        }
    }
}

验证方法

通过POSTMAN进行请求模拟,配置不同的Origin,查看返回结果。
在这里插入图片描述
如果不需要跨域,则直接清理掉add_header Access-Control-Allow-Origin等相关配置,就不这么复杂了。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
配置Nginx以忽略跨域请求,你可以通过以下步骤进行设置: 1. 打开Nginx配置文件,通常位于/etc/nginx/nginx.conf。 2. 在http块中添加一个变量$allow_cors来控制是否允许跨域请求。默认情况下,将该变量设置为1,表示允许跨域请求。 3. 添加一个server块来监听特定的端口(例如8180)。 4. 在server块内添加一个if语句来检查$allow_cors变量的值。如果$allow_cors等于0,则返回403禁止访问。 5. 配置location指令来指定需要处理的路径。你可以使用正则表达式来匹配路径,如"/index"和"/accusation"。 6. 在location块内使用proxy_pass指令将请求转发给后端服务。 7. 保存和关闭配置文件。 8. 重新启动Nginx服务,使配置生效。 以下是一个示例配置: ```nginx worker_processes 1; events { worker_connections 1024; } http { include mime.types; default_type application/octet-stream; sendfile on; keepalive_timeout 65; map $http_origin $allow_cors { default 1; "~^(https?://(localhost)(:[0-9])?)$" 1; "~*" 0; } server { listen 8180; if ($allow_cors = 0) { return 403; } location / { root html; index index.html index.htm; } location /index { proxy_pass http://localhost:8080/accusation; } location /accusation { proxy_pass http://localhost:8080/accusation; } } } ``` 另外,你还可以使用正则表达式来匹配指定的路径并禁止跨域请求。下面是一个示例配置: ```nginx worker_processes 1; events { worker_connections 1024; } http { include mime.types; default_type application/octet-stream; sendfile on; keepalive_timeout 65; map $http_origin $allow_cors { default 1; "~^(https?://(localhost)(:[0-9])?)$" 1; "~*" 0; } server { listen 8180; if ($request_uri ~ ^accu.*$) { set $allow_cors "2$allow_cors"; } if ($allow_cors = "21") { return 403; } location / { root html; index index.html index.htm; } location /index { proxy_pass http://localhost:8080/accusation; } location /accusation { proxy_pass http://localhost:8080/accusation; } } } ``` 这样配置后,Nginx将忽略跨域请求,并只允许特定的请求通过。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Cyufeng

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值