加入收藏 | 设为首页 | 会员中心 | 我要投稿 PHP编程网 - 黄冈站长网 (http://www.0713zz.com/)- 数据应用、建站、人体识别、智能机器人、语音技术!
当前位置: 首页 > 站长资讯 > 动态 > 正文

不知道的CORS跨域资源共享

发布时间:2021-05-05 10:02:55 所属栏目:动态 来源:互联网
导读:源策略: 即针对于DOM,禁止对不同源页面的DOM进行操作;如不同域名的 iframe 是限制互相访问。 2 . XMLHttpRequest 同源策略 :禁止使用 XHR 对象向不同源的服务器地址发起 HTTP 请求。 不受同源策略限制: 1. 页面中的链接,重定向以及表单提交(因为表单提

源策略:即针对于DOM,禁止对不同源页面的DOM进行操作;如不同域名的 iframe 是限制互相访问。

      2 . XMLHttpRequest 同源策略:禁止使用 XHR 对象向不同源的服务器地址发起 HTTP 请求。

  •  不受同源策略限制:

      1.  页面中的链接,重定向以及表单提交(因为表单提交,数据提交到action域后,本身页面就和其没有关系了,不会管请求结果,后面操作都交给了action里面的域)是不会受到同源策略限制的。

      2.  资源的引入不受限制,但是js不能读写加载的内容:如嵌入到页面中的<script src="..."></script>,<img>,<link>,<iframe>等

为什么要跨域限制

  •  如果没有 DOM 同源策略:那么就没有啥xss的研究了,因为你的网站将不是你的网站,而是大家的,谁都可以写个代码操作你的网站界面
  •  如果没有XMLHttpRequest 同源策略,那么就可以很轻易的进行CSRF(跨站请求伪造):

      1.  用户登录了自己的网站页面 a.com,cookie中添加了用户标识。

      2.  用户浏览了恶意页面 b.com,执行了页面中的恶意 AJAX 请求代码。

      3.  b.com 向 a.com发起 AJAX HTTP 请求,请求会默认把 a.com对应cookie也同时发送过去。

      4.  a.com从发送的 cookie 中提取用户标识,验证用户无误,response 中返回请求数据;数据就泄露了。而且由于Ajax在后台执行,这一过程用户是无法感知的。

  •  (附)有了XMLHttpRequest 同源策略就可以限制CSRF?别忘了还有不受同源策略的:表单提交和资源引入,(安全问题下期在研究)

跨域决解方案

  1. JSONP 跨域:借鉴于 script 标签不受浏览器同源策略的影响,允许跨域引用资源;因此可以通过动态创建 script 标签,然后利用 src 属性进行跨域;

      缺点:

    1.所有网站都可以拿到数据,存在安全性问题,需要网站双方商议基础token的身份验证。

    2.只能是GET,不能POST。

    3.可能被注入恶意代码,篡改页面内容,可以采用字符串过滤来规避此问题。

  2. 服务器代理:浏览器有跨域限制,但是服务器不存在跨域问题,所以可以由服务器请求所要域的资源再返回给客户端。

  3. document.domain、window.name 、location.hash:借助于iframe决解DOM同源策略

  4. postMessage:决解DOM同源策略,新方案

  5. CORS(跨域资源共享):这里讲的重点

CORS(跨域资源共享)

  •  HTML5 提供的标准跨域解决方案,是一个由浏览器共同遵循的一套控制策略,通过HTTP的Header来进行交互;主要通过后端来设置CORS配置项

CORS简单使用和非简单请求

  •  浏览器发送跨域请求判断方式:
    •   浏览器在发送跨域请求的时候,会先判断下是简单请求还是非简单请求,如果是简单请求,就先执行服务端程序,然后浏览器才会判断是否跨域;
    •   而对于非简单请求,浏览器会在发送实际请求之前先发送一个OPTIONS的HTTP请求来判断服务器是否能接受该跨域请求;如果不能接受的话,浏览器会直接阻止接下来实际请求的发生。
  •  什么是简单请求

     1. 请求方法是如下之一:

        GET

        HEAD

        POST

     2. 所有的Header都只包含如下列表中(没有自定义header):

        Cache-Control

        Content-Language

        Content-Type

        Expires

        Last-Modified

        Pragma

  •  除此之外都是非简单请求

CORS非简单请求配置须知

  •  正如上图报错显示,对于非简单请求,浏览器会先发送options预检,预检通过后才会发送真是的请求;
  •  发送options预检请求将关于接下来的真实请求的信息给服务器: 

(编辑:PHP编程网 - 黄冈站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读