首页 > 系统相关 >nginx处理options请求

nginx处理options请求

时间:2022-11-24 19:00:20浏览次数:66  
标签:Control 请求 header options nginx Allow OPTIONS 跨域

运维=nginx处理options请求

发表于 2019-09-29  |  分类于 前端  |  没有评论

禁止OPTIONS请求响应200

运维:补漏洞-禁止OPTIONS请求响应200。

安全扫描检测到部分请求地址,将对应方法由GET、POST、HEAD改成OPTIONS,发现可以返回服务器的允许请求设置信息,如

Allow → GET,HEAD,POST,OPTIONS,TRACE

Cache-Control → max-age=86400Connection → keep-alive

Content-Encoding → gzip

Content-Length → 20Content-Type → text/html

Date → Thu, 30 Jun 2016 04:00:24 GMT

Expires → Fri, 01 Jul 2016 04:00:24 GMT

Server → bfe/1.0.8.14

Vary → Accept-Encoding,User-Agent

一版设置允许跨域接口的返回信息中包含如上,后端没有通过CORS设置允许跨域,不会返回带Allow对应信息。 安全漏洞检测结果要求需要将禁止在OPTIONS请求响应200,因为在返回结果中会携带allow信息,可以直接在nginx中修改, 在location内部加入如下:对OPTIONS请求进行禁止:

if ($request_method = 'OPTIONS') {

return 403;

}

但是当后端设置允许请求跨域时,对于有些跨域请求,在请求前先发一个OPTIONS请求,根据返回结果判断请求所在域是否允许请求,对于设置了允许跨域的后台,都会返回allow的信息,如果没有则需要在nginx中如下修改,设置OPTIONS请求返回header信息,保证真正的跨域请求可以发送。

if ($request_method = 'OPTIONS') {

add_header Access-Control-Allow-Origin *;

add_header Access-Control-Allow-Credentials true;

add_header Access-Control-Allow-Methods 'GET, POST, OPTIONS';

add_header 'Access-Control-Allow-Headers' 'DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type';

return 200;

}

对应安全漏洞中要求,OPTIONS不能返回200,所以返回204。(请求成功,但是没有内容)

if ($request_method = 'OPTIONS') {    

add_header Access-Control-Allow-Origin *;

add_header Access-Control-Allow-Credentials true;

add_header Access-Control-Allow-Methods 'GET, POST, OPTIONS';

add_header 'Access-Control-Allow-Headers' 'DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type';

return 204;

}

如上所说,并不是所有的跨域请求都需要先发OPTIONS请求的,规范里面规定,以下情况不需要先发一个OPTIONS请求:

  • 1、请求类型必须是GET、HEAD、POST中的一种。
  • 2、请求的Header里面只能包涵一些规范重点Header,以及规范的值,包括:Accept、Accept-Language、Content-Language、Content-Type、DPR、Downlink、Save、Data、Viewport-Width、Width
  • 3、Content-Type的类型必须是以下几种:application/x-www-form-urlencoded、multipart/form-data、text/plain 所以,如果你不希望浏览器多余的发一个OPTIONS请求,只要遵循这个规范就可以了。 但是有时候因为需求原因,也难避免要自定义一些Header。比如,很多JS的AJAX库,都会自定义一个Header,让服务器可以识别出这是否是一个异步请求,这样OPTIONS请求就一定要被先发送了。

对于必须要禁止OPTIONS请求响应的,意味着不可以正常使用后端CORS跨域设置了,可以通过nginx代理方式实现跨域功能,及在nginx配置中加入对应请求配置,该请求域下的请求将被代理。

location  /push {

       proxy_pass   http://127.0.0.1:15080;

       #access_log /logs/nginx/access.log main;

}

标签:Control,请求,header,options,nginx,Allow,OPTIONS,跨域
From: https://www.cnblogs.com/Lqdream/p/16922869.html

相关文章

  • nginx使用wss协议出现wss handshake: Unexpected response code: 400
    在nginx中配置好https协议之后,我以为可以使用反向代理在tomcat容器中的页面js调用websocket用wss了,但是没想到居然报了个错:handshake:Unexpectedresponsecode:400查了一......
  • 服务器配置nginx和tomcat都使用https协议
    如果服务器需要配置https协议,我们很容易的在nginx上加入相应的证书配置就可以实现,但是如果我们服务器的环境有php和Java这两种的话,而Java使用的是tomcat容器,但是又想实现两......
  • 编译安装nginx支持lua
    1、下载lua模块wgethttps://github.com/openresty/lua-nginx-module/archive/v0.10.9rc7.tar.gz解压到/usr/local/目录下tarxvfv0.10.9rc7......
  • docker安装并配置nginx
    1.下载[root@host-10-23-110-128mysql]#dockerpullnginx:latestlatest:Pullingfromlibrary/nginxa2abf6c4d29d:Alreadyexistsa9edb18cadd1:Pullcomplete589......
  • 配置nginx动静分离全步骤
    1、目的高并发环境下,大量请求从服务器后端获取资源,给后台服务器造成了巨大的压力。因此,在发布代码时,需要将后端的静态资源放到nginx,形成动态文件和静态文件分离。静态文件就......
  • Nginx10 Lua入门 + openresty
    1Idea中创建Lua项目lua官网:https://www.lua.org/ 1.1添加插件,重启idea 1.2创建项目file-NewProject 1.3创建lua文件 1.4配置lua运行程序1......
  • 【feign client】使用feignclient 调用rest请求的几种方式
    get参数是在path中的参数是在param中的post......
  • 一个Nginx部署多个vue前端项目总结
    摘要:近来接手了一个二次开发的前后端分离模式的项目,其中在前端项目的部署上需要让2个前端项目都部署到一个IP地址和端口下,那么我们这里就要用到Nginx了,接下来我们看看如何在......
  • nginx 负载均衡
    nginx负载均衡的三种方式主要是轮询模式、weight权重模式、ip_hash。当一台服务器的单位时间内的访问量越大时,服务器压力就越大,大到超过自身承受能力时,服务器就会崩溃。为......
  • OpenSSL生成并使用CA根证书签名Keytool生成的证书请求
    1,生成私钥[带密码][root@node00security]#opensslgenrsa[-des3]-outca.key2048GeneratingRSAprivatekey,2048bitlongmodulus..................................