资讯专栏INFORMATION COLUMN

js同源策略之共享cookie

Miyang / 2481人阅读

摘要:为什么要有同源限制同源策略的目的主要是为了防止恶意获取修改网站数据。假设现在没有同源策略,会发生什么事情呢大家知道,可以做很多东西,比如读取修改网页中某个值。

什么是同源

同domain(或ip),同端口,同协议视为同一个域,一个域内的脚本仅仅具有本域内的权限,可以理解为本域脚本只能读写本域内的资源,而无法访问其它域的资源。这种安全限制称为同源策略。

为什么要有同源限制

同源策略的目的主要是为了防止恶意获取/修改网站数据。而这些数据主要包括cookie,LocalStorage,DOM,以及发送的AJAX请求。
假设现在没有同源策略,会发生什么事情呢?大家知道,JavaScript可以做很多东西,比如:读取/修改网页中某个值。恩,你现在打开了浏览器,在一 个tab窗口中打开了银行网站,在另外一个tab窗口中打开了一个恶意网站,而那个恶意网站挂了一个的专门修改银行信息的JavaScript,当你访问 这个恶意网站并且执行它JavaScript时,你的银行页面就会被这个JavaScript修改,后果会非常严重!而同源策略就为了防止这种事情发生。
所以,我们可以知道,同源策略是必须的,但是,有的时候我们还是要规避同源策略的限制,比如说从A网站跳到B网站时,我们要读到A网站的cookie。

document.domain

document.domain属性用来得到当前网页的域名。
我们也可以给document.domain属性赋值,不过是有限制的,你只能赋成当前的域名或者基础域名。
比如:你当前域名是qa-my.test.segmentgault.com
那么你就可以设置

document.domain = ".test.segmentgault.com"

或者

document.domain = "qa-my.test.segmentgault.com"

上面的赋值都是成功的,因为qa-my.test.segmentgault.com是当前的域名,而.test.segmentgault.com是基础域名。
但是下面的赋值就会出来"参数无效"的错误:

document.domain = "google.com"

因为google.com即不是当前的域名也不是当前域名的基础域名,所以会有错误出现。
这是为了防止有人恶意修改document.domain来实现跨域偷取数据。

利用document.domain 实现共享cookie

Cookie 是服务器写入浏览器的一小段信息,只有同源的网页才能共享。浏览器允许基础域名相同的网站间通过设置document.domain共享 Cookie。
举例来说,A网页是

http://my.segmentfault.com/a.html

B网页是

http://he.segmentfault.com/b.html

那么只要设置相同的document.domain,两个网页就可以共享Cookie。

document.domain = "segmentfault.com"

现在,A网页通过脚本设置一个 Cookie

document.cookie = "domainTest=hello world"

B网页就可以读到这个Cookie

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/87787.html

相关文章

  • 你不知道的CORS跨域资源共享

    摘要:同源策略禁止使用对象向不同源的服务器地址发起请求。借助于决解同源策略决解同源策略,新方案跨域资源共享这里讲的重点跨域资源共享提供的标准跨域解决方案,是一个由浏览器共同遵循的一套控制策略,通过的来进行交互主要通过后端来设置配置项。 了解下同源策略 源(origin)*:就是协议、域名和端口号; 同源: 就是源相同,即协议、域名和端口完全相同; 同源策略:同源策略是浏览器的一个安全...

    Gu_Yan 评论0 收藏0
  • 前端跨域原因&&方案&&原理

    摘要:于是乎同源策略应运而生主要限制在于和无法读取。怎么绕过同源策略首先一般来说协议和端口造成的跨域问题大部分方法是没有办法绕过的。二级域名是寄存在主域名之下的域名。当主域名受到惩罚二级域名也会连带惩罚。 前言 这是一道前端跨不过躲不掉面试必备的知识,挣扎多年没能做到刻骨铭心深入脊髓,只能好好写篇博文记录起来了; 什么是跨域? 广义来说,A域执行的文档脚本试图去请求B域下的资源是不被允许的,...

    Zack 评论0 收藏0
  • js中跨域的方法

    摘要:但是这种方法适用于和窗口,和无法通过这种方法规避同源策略。逗号分隔的一个字符串,表明服务器支持的所有跨域请求的方法。 在制作oneday-music-player的时候要使用ajax向百度音乐的api发送请求,然后出现了XMLHttpRequest cannot load http://.... . No Access-Control-Allow-Origin header is pr...

    Jacendfeng 评论0 收藏0
  • 浏览器同源策略,及跨域解决方案

    摘要:三哪些会受到同源策略限制对于浏览器来说,除了会受到同源策略的限制外,浏览器加载的一些第三方插件也有各自的同源策略。九的现代浏览器允许脚本直连一个地址而不管同源策略。 一、Origin(源) 源由下面三个部分组成: 域名 端口 协议 两个 URL ,只有这三个都相同的情况下,才可以称为同源。 下来就以 http://www.example.com/page.html 这个链接来比较说...

    scq000 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<