精华内容
下载资源
问答
  • 跨域资源共享

    2021-09-29 12:13:43
    1.跨域资源共享 通过XHR进行Ajax通信的一个主要限制是跨源安全策略。默认情况下,XHR只能访问与发起请求的页面在同一个域(源)内的资源。这个安全限制可以防止某些恶意行为,不过,浏览器也需要支持合法跨源访问的...

    1.跨域资源共享

    通过XHR进行Ajax通信的一个主要限制是跨源安全策略。默认情况下,XHR只能访问与发起请求的页面在同一个域(源)内的资源。这个安全限制可以防止某些恶意行为,不过,浏览器也需要支持合法跨源访问的能力
    跨源资源共享(CORS,Cross-Origin Resource Sharing)定义了浏览器与服务器如何实现跨源通信。CORS背后的基本思路是使用自定义的HTTP头部允许浏览器和服务器相互了解,以确定请求或响应应该成功还是失败。
    对于简单的请求,比如GET或POST请求,没有自定义头部,而且请求体是text/plain类型,这样的请求在发送时会有一个额外的头部叫Origin。Origin头部包含发送请求的页面的源(协议、域名和端口),以便服务器确定是否为其提供相应。

    Origin:http://www.znglzx.com:80
    Origin:https://www.znglzx.com:443
    Origin:http://im.znglzx.com:80
    

    如果服务器决定响应请求,那么应该发送Access-Control-Allow-Origin头部,包含相同的源;或者如果资源是公开的,那么就包含"*"。比如:Access-Control-Allow-Origin:https://www.znglzx.com:443
    如果没有这个头部,或者有但源不匹配,则表明不会响应浏览器请求。否则,服务器就会处理这个请求。注意,无论请求还是响应都不会包含cookie信息。
    现代浏览器通过XMLHttpRequest对象原生支持CORS。在尝试访问不同源的资源时,这个行为会被自动触发。要向不同域的源发送请求,可以使用标准XHR对象并给open()方法传入一个绝对URL,比如:

    let xhr=new XMLHttpRequest();
    xhr.onreadstatechange=function(){
    	if(xhr.readyState == 4){
    		if((xhr.status>=200 && xhr.status<300) || xhr.status==304){
    			alert(xhr.responseTest);
    		}else{
    			alert("Request was unsuccessful:" + xhr.status);
    		}
    	}
    };
    xhr.open("get","https://www.znglzx.com/page/",true);
    xhr.send(null);
    

    跨域XHR对象允许访问status和statusText属性,也允许同步请求。出于安全考虑,跨域XHR对象也施加了一些额外限制。

    • 不能使用setRequestHeader()设置自定义头部
    • 不能发送和接收cookie
    • getAllResponseHeaders()方法始终返回空字符串

    因为无论同域还是跨域请求都是用同一个接口,所以最好在访问本地资源时使用相对URL,在访问远程资源时使用绝对URL,这样可以更明确的区分使用场景,同时避免出现访问本地资源时出现头部或cookie信息访问受限的问题。

    2.预检请求

    CORS通过一种叫预检请求(preflighted request)的服务器验证机制,允许使用自定义头部、除GET和POST之外的方法,以及不同请求体内容类型。在要发送设计上述各种高级选项的请求时,会先向服务器发送一个”预检“请求。这个请求使用OPTIONS方法发送并包含以下头部。
    Origin:与简单请求相同
    Access-Control-Request-Method:请求希望使用的方法。
    Access-Control-Request-Headers:(可选)要使用的逗号分隔的自定义头部列表。
    下面是一个假设的POST请求,包含自定义的SystemID头部:

    Origin:https://www.znglzx.com
    Access-Control-Request-Method:POST
    Access-Control-Request-Headers:SystemID
    

    在这个请求发送后,服务器可以确定是否允许这种类型的请求。服务器会通过在响应中发送如下头部与浏览器沟通这些信息。

    • Access-Control-Allow-Origin:与简单请求相同
    • Access-Control-Allow-Methods:允许的方法(逗号分隔的列表)
    • Access-Control-Allow-Headers:服务器允许的头部(逗号分隔的列表)
    • Access-Control-Max-Age:缓存预检请求的秒数
      例如:
    • Access-Control-Allow-Origin:https://www.znglzx.com
    • Access-Control-Allow-Methods:POST,GET
    • Access-Control-Allow-Headers:SystemID,UserId
    • Access-Control-Max-Age:1728000
      预检请求返回后,结果会按响应指定的时间缓存一段时间。换一句话说,只有第一次发送这种类型的请求时才会多发送一次额外的HTTP请求。

    2.凭据请求

    默认情况下,跨域请求不提供凭据(cookie,HTTP认证和客户端SSL证书)。可以通过将withCredentials属性设置为true来表明请求会发送凭据。如果服务器允许带凭据的请求,那么可以在响应中包含如下HTTP头部:Access-Control-Allow-Credentials:true如果发送了凭据请求而服务器返回的响应中没有这个头部,则浏览器不会把响应交给JavaScript(responseText是空字符串,status是0,onerror()被调用)。服务器也可以在预检请求的响应中发送这个HTTP头部,以表明这个源允许发送凭据请求。

    4.替代性跨域技术

    CORS出现之前,实现跨源Ajax通信是有点麻烦的。开发者需要依赖能够执行跨源请求的DOM特性,在不使用XHR对象情况下发送某种类型的请求。虽然CORS目前已经得到广泛支持,但这些技术仍然没有过时,因为它们不需要修改服务器。

    @@@

    展开全文
  • 跨域资源共享(cors)可以放宽浏览器的同源策略,可以通过浏览器让不同的网站和不同的服务器之间通信。 同源策略 同源策略在浏览器安全中是一种非常重要的概念,大量的客户端脚本支持同源策略,比如JavaScript。 ...

    跨域资源共享(cors)可以放宽浏览器的同源策略,可以通过浏览器让不同的网站和不同的服务器之间通信。

    同源策略

    同源策略在浏览器安全中是一种非常重要的概念,大量的客户端脚本支持同源策略,比如JavaScript。


    同源策略允许运行在页面的脚本可以无限制的访问同一个网站(同源)中其他脚本的任何方法和属性。当不同网站页面(非同源)的脚本试图去互相访问的时候,大多数的方法和属性都是被禁止的。

    这个机制对于现代web应用是非常重要的,因为他们广泛的依赖http cookie来维护用户权限,服务器端会根据cookie来判断客户端是否合法,是否能发送机密信息。


    浏览器要严格隔离两个不同源的网站,目的是保证数据的完整性和机密性。

    “同源”的定义:

    • 域名
    • 协议
    • tcp端口号

    只要以上三个值是相同的,我们就认为这两个资源是同源的。


    为了更好的解释这个概念,下面这个表将利用"http://www.example.com/dir/page.html"

    这个url作为示例,展示在同源策略控制下不同的结果

    下面这个图展示的是:如果不启用cors的时候,恶意脚本发出一个请求之后发生的事情 

    跨域资源共享(CORS)

    同源策略对于大型应用有太多的限制,比如有多个子域名的情况


    现在已经有大量技术可以放宽同源策略的限制,其中有一种技术就是跨域资源共享(CORS)


    CORS是一种机制,这种机制通过在http头部添加字段,通常情况下,web应用A告诉浏览器,自己有权限访问应用B。这就可以用相同的描述来定义“同源”和“跨源”操作。


    CORS的标准定义是:通过设置http头部字段,让客户端有资格跨域访问资源。通过服务器的验证和授权之后,浏览器有责任支持这些http头部字段并且确保能够正确的施加限制。


    主要的头部字段包含:“Access-Control-Allow-Origin”

    Access-Control-Allow-Origin: https://example.com

    这个头部字段所列的“源”可以以访客的方式给服务器端发送跨域请求并且可以读取返回的文本,而这种方式是被同源策略所阻止的。

    默认情况下,如果没有设置“Access-Control-Allow-Credentials”这个头的话,浏览器发送的请求就不会带有用户的身份数据(cookie或者HTTP身份数据),所以就不会泄露用户隐私信息。
    下面这个图展示一个简单的CORS请求流:

    身份数据

    服务器端也会通知客户端是否发送用户的身份数据(cookie或者其他身份数据),如果http头部中的“Access-Control-Allow-Credentials”这个字段被设置“true",那么客户端身份数据就会被发送到目标的服务器上

    预发布请求

    因为请求会修改数据(通常是GET以外的方法),在发送这些复杂请求之前,浏览器会发送一个”探测“请求


    cors预检的目的是为了验证CORS协议是否被理解,预检的OPTION请求包含下面三个字段

    • “Access-Control-Request-Method”
    • “Access-Control-Request-Headers”
    • “Origin”

    这些字段会被浏览器自动的发给服务器端。所以,在正常情况下,前端开发人员不需要自己指定此类请求。


    如果服务器允许发送请求,那么浏览器就会发送所需的HTTP数据包。

    允许多个源

    协议建议,可以简单的利用空格来分隔多个源,比如:

    Access-Control-Allow-Origin: https://example1.com https://example2.com

    然而,没有浏览器支持这样的语法
    通常利用通配符去信任所有的子域名也是不行的,比如:

    Access-Control-Allow-Origin: *.example1.com

    当前只支持用通配符来匹配域名,比如下面:

    Access-Control-Allow-Origin: *

    这样配置浏览器将会报错,因为在响应具有凭据的请求时,服务器必须指定单个域,所不能使用通配符。简单的使用通配符将有效的禁用“Access-Control-Allow-Credentials”这个字段。


    这些限制和行为的结果就是许多CORS的实现方式是根据“Origin”这个头部字段的值来生成“AccessControl-Allow-Origin”的值

    其他相关的头部字段

    还有一些关于CORS的头部字段,其中一个字段是“Vary"


    根据CORS的实施标准,当”Access-Control-Allow-Origin“是被动态产生的话,就要用”Vary: Origin“去指定。


    这个头部字段向客户端表明,服务器端返回内容的将根据请求中”Origin“的值发生变化。如果如果未设置此标头,则在某些情况下,它可能会被某些攻击所利用,如在下一节中描述

     专注于高质量 技术文章原创分享与交流,拒绝水文、软文。

    原文首发地址:跨域资源共享(cors)到底解决了什么?

    展开全文
  • 跨域资源共享(CORS)

    2021-08-06 16:23:18
    跨域资源共享通过一种机制来检查服务器是否会允许要发送的真实请求;该机制通过浏览器发起一个到服务器托管的跨源资源的**“预检”请求**; 在预检中,浏览器发送的头中标示有HTTP方法和真实请求中用到的头; CORS...

    CORS是一种基于HTTP头的机制,该机制通过允许服务器标示除了它自己以外的其他origin(域、协议和端口),这样浏览器可以访问加载这些资源。

    跨域资源共享通过一种机制来检查服务器是否会允许要发送的真实请求;该机制通过浏览器发起一个到服务器托管的跨源资源的**“预检”请求**;

    在预检中,浏览器发送的头中标示有HTTP方法真实请求中用到的头

    CORS请求中分为简单请求和非简单请求:
    简单请求:

    • 不会触发CORS预检请求;
    • 简单请求的条件:
      • GET、HEAD、POST方法

      • Content-Type 的值仅限于下列三者之一:

        • text / plain
        • multipart / form-data
        • application / x-www-form-urlencoded

    非简单请求:

    • 非简单请求需要进行一次预检请求;预检请求必须使用OPTIONS 方法发起一个预检请求到服务器,以获知服务器是否允许该实际请求;“预检请求”的使用,可以避免跨域请求对服务器的用户数据产生未预期的影响。
    • 浏览器检测到:从JS 中发起的请求需要被预检,便使用OPTION方法发送预检请求,该方法不会对服务器资源产生影响;预检请求中同时携带下面两个首部字段,服务器据此决定,该实际请求是否被允许。
      • Access-Control-Request-Method:POST
      • Access-Control-Request-Headers: X-PINGOTHER, Content-type

    预检请求的响应,表明服务器将接受后续的实际请求。

    Access-Control-Allow-Origin: http://foo.example
    Access-Control-Allow-Methods: POST, GET, OPTIONS
    Access-Control-Allow-Headers: X-PINGOTHER, Content-Type
    Access-Control-Max-Age: 86400

    Access-Control-Max-Age表明该响应的有效时间为86400秒,也就是24小时;在有效时间内,浏览器无需为同一请求再次发送预检请求

    一、HTTP请求方法介绍

    POST:非幂等;(新增或者修改)
    PUT、DELETE:幂等;(修改 / 删除)

    幂等是一个数学与计算机学概念;幂等操作的特点是:任意多次执行产生的影响均与一次执行的影响相同;幂等方法是指可以使用相同参数重复执行,并获得相同结果的函数。这些函数不会影响系统状态,也不用担心重复执行会对系统造成改变

    1、HEAD

    HEAD方法与GET方法一样,都是向服务器发出指定资源的请求。但是,服务器在响应HEAD请求时不会回传资源的内容部分,即:响应主体。这样,我们可以不传输全部内容的情况下,就可以获取服务器的响应头信息,HEAD方法常被用于客户端查看服务器的性能

    2、POST

    POST 请求会向指定资源提交数据,请求服务器进行处理;如:表单数据提交、文件上传等;请求数据会被包含在请求体中;POST 方法是 非幂等 的方法,因为这个请求可能会创建新的资源和 / 或 修改现有资源。(简单来说,就是修改资源或者新加资源)

    3、PUT

    PUT 请求会向指定资源位置上传其最新内容,PUT 方法是幂等 的方法;通过该方法,客户端可以将指定资源的最新数据传送给服务器取代指定的资源的内容。(简单来说:就是修改资源)

    4、DELETE

    DELETE 请求用于请求服务器删除URI标识的资源,DELETE请求后,制定资源会被删除,DELETE 方法也是幂等的。

    5、CONNECT

    CONNECT 方法是 HTTP/1.1 协议预留的,能够将连接改为管道方式的代理服务器;通常用于SSL加密服务器的链接与非加密的HTTP代理服务器的通信。

    6、OPTIONS

    OPTIONS 请求与 HEAD 类似,一般也用于客户端查看服务器的性能;这个请求会请求服务器返回资源所支持的所有HTTP请求方法,向服务器发送OPTIONS 请求,可以测试服务器功能是否正常(CORS跨域资源共享时,就是使用OPTIONS方法发送预检请求,以判断是否有对指定资源的访问权限)。

    展开全文
  • CORS跨域资源共享漏洞验证测试

    千次阅读 2021-01-17 15:43:48
    之前在对网站进行安全性测试时,使用AWVS漏扫发现存在一个CORS跨域资源共享漏洞。记录一下验证及修复方式。 afei 漏洞等级:高危 2.CORS漏洞概述 CORS(跨源资源共享)定义了一种机制来支持客户端跨源...
    展开全文
  • CORS,跨域资源共享(Cross-origin resource sharing),是H5提供的一种机制,WEB应用程序可以通过在HTTP增加字段来告诉浏览器,哪些不同来源的服务器是有权访问本站资源的,当不同域的请求发生时,就出现了跨域的...
  • 跨域资源共享CORS

    2021-04-07 16:33:29
    1、背景 在前后端分离的开发模式中,数据的获取并非同源,所有就出现了跨域的问题。... CORS是一个W3C标准,全称是"跨域资源共享"(Cross-origin resource sharing)。允许浏览器向跨源服务器,发出XMLHt...
  • CORS(跨域资源共享)漏洞解决方法

    千次阅读 2021-07-23 10:06:59
    最近,测试环境上的项目被360测试人员检测出来有一个CORS漏洞,以下记录下漏洞问题与解决方法。 一、低危漏洞:CORS漏洞问题 测试人员访问某个url,将请求头中的Origin字段修改为任意值,结果仍然能获得正确的响应...
  • 传统的跨域方案时使用JSONP,但是JSONP只支持GET请求,不支持其他类型的请求,不过在spring框架中,也对于跨域资源共享也提供了解决方案。 实现 1、创建两个springboot项目,第一个名为study,端口为8080;第二个名...
  • CORS 跨域资源共享

    2021-04-27 09:20:27
    CORS (Cross-Origin Resource Sharing) 跨域资源共享为什么需要 CORS首先,跨域指的是同一个域名下的资源,同时要注意域名与子域名,比如 developers.e.qq.com 和 developers.proxy.qq.com 不属于同一个域,同样属于...
  • 跨域资源共享Cors

    2021-04-14 10:47:53
    跨域资源共享Cors CORS是什么 跨域资源共享(CORS,Cross-origin resource sharing),是W3C标准,是一种机制,它使用额外的HTTP头来告诉浏览器,让运行在一个 origin (domain) 上的Web应用被准许访问来自不同源...
  • 文章目录一、什么是跨域?三、过滤器四、nginx反向代理做api转发 一、什么是跨域? 当一个请求url的协议、域名、端口三者之间任意一个与当前页面url不同即为跨域 当前页面url 被请求页面url 是否跨域 原因 ...
  • 目录一、什么是CORS(跨域资源共享)?同源政策二、由CORS配置问题引起的漏洞服务器生成的来自客户端指定的Origin头的ACAO头 一、什么是CORS(跨域资源共享)? 跨域资源共享(CORS)是一种浏览器机制,可实现对...
  • 但在 CORS (Cross-Origin Resource Sharing),即 跨域资源共享 机制下,我们可以进行安全的接口跨域请求。 本示例演示几种场景:(参考 运行 章节,打开浏览器自行测试 ↑ ) 1. 直接访问 Test Direct && Test ...
  • 这个 CORS 指的是跨域资源共享。现在我们的这个客户端应用的地址跟它请求的服务端应用的接口不属于同一个域,虽然都是 localhost ,但是它们用的端口不一样,所以也不属于同一个域。这种情况如果客户端想要请求使用...
  • // 注意:如果跨域请求中涉及到cookie信息传递,值不可以为*号 比如是具体的域名信息 res.header('Access-Control-Allow-Origin', 'http://localhost:3000') // 2.允许客户端使用哪些请求方法访问我 re
  • 后端架api服务器,架设的过程中要在服务器端设置开启 CORS 跨域资源共享,否则前后端只能架设在同一个服务器上的同一个端口上,没有办法做到真正的分离。这方法是基于tomcat 下后台api的,其他前端解决的办法可自行...
  • 安全系列之:跨域资源共享CORS

    万次阅读 2021-09-13 09:47:28
    什么是跨域资源共享呢? 我们知道一个域是由scheme、domain和port三部分来组成的,这三个部分可以唯一标记一个域,或者一个服务器请求的地址。跨域资源共享的意思就是服务器允许其他的域来访问它自己域的资源。 CORS...
  • CORS是一个W3C标准,全称是"跨域资源共享"(Cross-origin resource sharing)。 它允许浏览器向跨源服务器,发出XMLHttpRequest请求,从而克服了AJAX只能同源使用的限制。 本文详细介绍CORS的内部机制。 (图片...
  • 最近在学习原生js的XMLHTTPRequest与跨域资源共享(CORS),想着用js时候简单的实现下post跨域请求,代码贴出来以供其他初学者参考. 这是客户端代码 <html> <body> <script> var xhr = new ...
  • [SpringBoot+Ajax]跨域资源共享CORS前后端分离简单演示样例一、简介1.样例简介2.项目结构二、代码事件 学习链接: 跨域资源共享CORS详解-阮一峰 学习链接: AJAX简介-W3School 所用工具:IDEA2021 一、简介 1.样例...
  • CORS通信
  • 该属性表示哪些域名可以访问资源,如果设置通配符则表示所有网站都可以访问资源。 通过这种方式解决跨域问题的话,会在发送请求时出现两种情况,分别为简单请求和复杂请求。 1.简单请求 允许的方法之一: G.
  • 标题:跨域资源共享 CORS 详解 作者: 阮一峰 日期: 2016年4月12日 CORS是一个W3C标准,全称是"跨域资源共享"(Cross-origin resource sharing)。 它允许浏览器向跨源服务器,发出XMLHttpRequest请求,从而克服了...
  • cross-origin resource sharing(CORS)跨域资源共享:是一种使用额外HTTP首部实现跨域获取资源权限的机制 XMLHttprequest获取非同源资源会被浏览器拦截,除非响应报文包含了正确CORS响应头 官网链
  • 由于ajax不允许跨域访问请求数据,所以可以用jsonp跨域请求数据或者使用cors跨域资源共享。 http://www.baidu.com 请求http://news.baidu.com这是域名不一样 http://www.baidu.com请求https://www.baidu.com这是...
  • js跨域资源共享 基础篇本文详细介绍了javascript跨域资源共享,供大家参考,具体内容如下1.为什么提出跨域资源共享(CORS)? 因为XHR实现ajax的安全限制是:XHR 对象只能访问与包含它的页面位于同一个域中的资源2.如何...
  • } 后记: 思路来源于阮一峰的一篇博客,原地址如下:http://www.ruanyifeng.com/blog/2016/04/cors.html  原文摘录如下: CORS是一个W3C标准,全称是"跨域资源共享"(Cross-origin resource sharing)。...
  • 介绍跨域资源共享(Cross-Origin Resource Sharing, CORS),介绍及配置请参看 跨域资源共享使用指南 。配置项CORS配置有以下几项:来源(AllowedOrigin):允许跨域请求的来源,可以同时指定多个。配置时需带上完整的...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 30,665
精华内容 12,266
关键字:

跨域资源共享