美文网首页
跨域系列之(一)

跨域系列之(一)

作者: 罗茂琛 | 来源:发表于2018-03-22 10:09 被阅读0次

最近或多或少经常看到跨域操作,自己也没有有个时间去专门研究透彻这一块,所以打算借此机会,好好研究一番,并为此写几篇博文,这也算巩固一下这方面的基础知识。

不过讲跨域之前就有必要先了解是什么导致了跨域才能清求,答案就是 浏览器的同源策略

那么何为 "" 呢?
首先看看RFC6454里有定义URI源的算法定义。

源包括协议、域名、端口号
标准浏览器下查看源的方式:location.origin
ie浏览器下不支持此种方式,但我们可以使用“ location.protocol查看协议、location.hostname查看域名、location.port查看端口号 ” 来查看源。

原文给出的例子:

例子 总结起来只有三个值一样,才属于同源,像图片中上面三个网址属于同源,下面的则不是。再给个具体的例子巩固下:

解决了什么是 下来就是什么是同源策略
一样来看看这篇文章的定义.

In computing, the same-origin policy is an important concept in the web application security model. Under the policy, a web browser permits scripts contained in a first web page to access data in a second web page, but only if both web pages have the same origin. An origin is defined as a combination of URI scheme, host name, and port number. This policy prevents a malicious script on one page from obtaining access to sensitive data on another web page through that page's Document Object Model.

同源策略是浏览器的一个安全功能,不同源的客户端脚本在没有明确授权的情况下,不能读写对方资源。所以lmc.com下的js脚本采用ajax读取szu.com里面的文件数据是会报错的。

• 不受同源策略限制的:
1、页面中的链接,重定向以及表单提交是不会受到同源策略限制的。
2、跨域资源的引入是可以的。但是js不能读写加载的内容。如嵌入到页面中的<script src="..."></script>,<img>,<link>,<iframe>等。

那么现实生活中,我们往往不能仅仅满足于同源之间资源共享,那么如何突破同源策略呢?

一、降域
对于主域相同而子域不同的例子,可以通过设置document.domain的办法来解决。具体的做法是可以在http://www.a.com/a.htmlhttp://script.a.com/b.html两个文件中分别加上document.domain = ‘a.com’;然后通过a.html文件中创建一个iframe,去控制iframe的contentDocument,这样两个js文件之间就可以“交互”了。当然这种办法只能解决主域相同而二级域名不同的情况,如果你异想天开的把script.a.com的domian设为alibaba.com那显然是会报错地!代码如下:

www.a.com上的a.html

document.domain = 'a.com';
var ifr = document.createElement('iframe');
ifr.src = 'http://script.a.com/b.html';
ifr.style.display = 'none';
document.body.appendChild(ifr);
ifr.onload = function(){
    var doc = ifr.contentDocument || ifr.contentWindow.document;
    // 在这里操纵b.html
    alert(doc.getElementsByTagName("h1")[0].childNodes[0].nodeValue);
};

script.a.com上的b.html document.domain = 'a.com';

问题:
1、安全性,当一个站点(b.a.com)被攻击后,另一个站点(c.a.com)会引起安全漏洞。
2、如果一个页面中引入多个iframe,要想能够操作所有iframe,必须都得设置相同domain。

相关文章

  • 跨域系列之(一)

    最近或多或少经常看到跨域操作,自己也没有有个时间去专门研究透彻这一块,所以打算借此机会,好好研究一番,并为此写几篇...

  • SpringBoot2.x整合CORS解决跨域问题

    跨域问题系列文章 1. 同源策略与CORS(跨域请求的起源)2. SpringBoot2.x整合CORS解决跨域问...

  • API-Server构建指南(4)-跨域

    跨域的前世今生系列。核心: 跨域是浏览器的安全策略跨域的具体规则 可参考https://blog.csdn.net...

  • 跨域系列之(二)

    二、JSNONPJSONP的原理是什么呢?我们来看看大神贺师俊的解释: 很简单,就是利用 标签没有跨域限制的“漏洞...

  • 跨域小结 - 跨域系列

    总结前端开发者遇到的跨域问题,大部分是在开发的过程中。由于此时项目是在本地运行,还没有进行正式发布。 本地域名下,...

  • 9.CORS

    cors是浏览器跨域的一种规范,规定的跨域方案:通过一系列http请求头去控制跨域行为。 将请求分为两类:简单请求...

  • 学习记录000之跨域&&Token&&a

    学习记录000之跨域&&Token&&Restful设计 1.跨域 1.1什么是跨域 一张图来了解下哪些情况下存在...

  • SSO实现调研

    零、耶鲁CAS SSO(支持跨域、子会话) 《SSO CAS单点系列》之 实现一个SSO认证服务器是这样的! 一....

  • jsonp跨域

    什么是跨域 请求协议(http,https)不同 域名(domain)不同 端口(port)不同 跨域解决方案之 ...

  • SpringBoot系列(八) 分分钟学会SpringBoot多

    SpringBoot系列(八) 分分钟学会SpringBoot多种跨域解决方式 往期推荐 SpringBoot系列...

网友评论

      本文标题:跨域系列之(一)

      本文链接:https://www.haomeiwen.com/subject/npvoqftx.html