JavaScript中的同源策略

我们都知道JavaScript可以操作web文档的内容,试想,如果不对这一点加以限制,那么JS可以做的事情就太多了,危险性也太高,所以就针对它可以操作哪些文档的内容有了一个限制,这个限制就是同源策略。

同源策略在什么情况下会起作用呢?当web页面使用多个<iframe>元素或者打开其他浏览器窗口的时候,这一策略就会起作用。

同源策略的含义:脚本只能读取和所属文档来源相同的窗口和文档的属性。


这里就涉及到了一个浏览器如何判断两者是否同源已经如何判断脚本来源的问题。

注意一点:脚本本身的来源并不作为判断是否同源的依据,而是将脚本所属文档的来源作为判断依据。

1. 判断脚本来源

例如:文档A中通过script的src引用了一个外部脚本,这个脚本时google提供的,也是从google的主机上加载到文档A中的,那么这个脚本的所属文档是谁呢,答案是文档A。

2. 判断是否同源

理解了脚本来源,接着理解怎么判断是否同源:如果两个文档在协议、主机以及载入文档的URL端口这三点中有一点不同,就认为他们不同源。


同源策略固然在安全性上有了很大提高,但这种做法属于“宁可错杀三千,不可放过一个”。如果一个多域名站点需要在不同的子域之间共享属性,同源策略就会变得很烦人了。以下介绍三种实现“不严格的同源策略”的方法:

1. 使用Document对象的domain属性

默认情况下,属性domain存放的是载入文档的服务器的主机名。这一属性是可写的。

如果两个窗口包含的脚本把domain设置为了相同的值,那么这两个窗口就不再受同源策略的约束,它们就可以相互读取对方的属性。

2. 跨域资源共享(Cross-Origin Resource Sharing)

这种方法用新的“Origin:”请求头和新的响应头“Access-Control-Allow-Origin”来扩展HTTP。

3. 跨文档消息(Cross-Document Messaging)

允许来自一个文档的脚本可以传递文本消息到另一个文档里的脚本,不管来源是否相同。

调用window对象的postMessage()方法,可以异步传递消息事件到窗口的文档里。这种方法仅仅是一种消息传递技术。

时间: 2024-10-21 03:03:24

JavaScript中的同源策略的相关文章

XSS前置课程--同源策略

什么是同源策略: 在用户浏览互联网中的网页的过程中,身份和权限的思想是贯穿始终的 同源策略(Same-Origin Policy),就是为了保证互联网之中,各类资源的安全性而诞生的产物,它实际上是一个众多浏览器厂商共同遵守的约定.同源策略是浏览器中基本的安全功能,缺少同源策略,很多浏览器的常规功能都会受到影响,可以说WEB是构建在同源策略基础之上的. 如果WEB世界没有同源策略,当你登录FreeBuf账号并打开另一个站点时,这个站点上的JavaScript可以跨越读取你的FreeBuf账号数据,

JavaScript同源策略

在web页面的开发中我们经常会说起脚本的跨域访问的问题,这个问题的始作俑者就是javascript语言安全限制中的同源策略(same-origin policy )所造成的. 同源策略简单的说就是一段脚本只能读取来自于同一来源的窗口和文档的属性,这里的同一来源指的是主机名.协议和端口号的组合: 示例:来自 http://www.360.cn/a/b.html 的js脚本访问下列url的结果和原因 URL 结果 原因 http://www.360.cn/c/d.html         成功 ht

同源策略和跨域

在前端开发的过程中,我们经常遇到"跨域"的问题,以下的文章将列举一下我在工作中碰到的跨域问题.以及稍稍的探讨一下为什么会有"跨域"问题的出现,和所谓的"同源策略" 同源策略 1. 历史 1995 年由 Netscape 公司提出,之后被其他浏览器厂商采纳. 同源策略只是一个规范,并没有指定其具体的使用范围和实现方式,各个浏览器厂商都针对同源策略做了自己的实现. 一些 web 技术都默认采取了同源策略,这些技术范围包括但不限于Silverlight

JavaScript 的同源策略

本文内容来源:https://developer.mozilla.org/zh-CN/docs/Web/Security/Same-origin_policy (由于我在本地打不开此链接,所以就转载过来.供大家一起学习) 同源策略限制了一个源(origin)中加载文本或脚本与来自其它源(origin)中资源的交互方式. 同源定义 如果两个页面拥有相同的协议(protocol),端口(如果指定),和主机,那么这两个页面就属于同一个源(origin). 下表给出了相对http://store.com

javascript 同源策略

何为同源策略? 同源策略是对javascript 代码能狗操作那些web内容的一条完整的安全限制.当web页面使用多个iframe 元素或者打开多个窗体的时候,这一策略就会发生作用. 理解同源策略:脚本来源和文档来源. 脚本来源:<script> javascript  src="http(s)://..." 来源. 文档来源:包含:协议,主机,以及载入文档的URL端口号.从不同的web服务器载入的文档具有不同的来源. 理解这两点很重要. 文档来源:1.通过同一主机的不同端

[转]JavaScript 的同源策略

同源策略限制了一个源(origin)中加载文本或脚本与来自其它源(origin)中资源的交互方式. 同源定义 如果两个页面拥有相同的协议(protocol),端口(如果指定),和主机,那么这两个页面就属于同一个源(origin). 下表给出了相对http://store.company.com/dir/page.html同源检测的示例: URL 结果 原因 http://store.company.com/dir2/other.html 成功   http://store.company.com

javascript 同源策略及web安全

同源策略限制一个加载于A origin的document或者script能够如何和来自于另外一个origin的resource交互.同源策略是隔离潜在恶意网页的安全机制. 源的定义 两个网页只有具有相同的protocol,port以及host才被认为是具有相同的origin的. 比如http://xxx.yyy.com:8000/zzz/page.html和http://xxx.yyy.com:8000/kkk/index.html具有相同的origin about:blank, javascr

JavaScript——同源策略

概念:同源策略是客户端脚本(尤其是Javascript)的重要的安全度量标准.它最早出自Netscape Navigator2.0,其目的是防止某个文档或脚本从多个不同源装载.   这里的同源指的是:同协议,同域名和同端口.精髓:   它的精髓很简单:它认为自任何站点装载的信赖内容是不安全的.当被浏览器半信半疑的脚本运行在沙箱时,它们应该只被允许访问来自同一站点的资源,而不是那些来自其它站点可能怀有恶意的资源.为什么要有同源限制?   我们举例说明:比如一个黑客程序,他利用IFrame把真正的银

javascript同源策略及解决

一.简介 跨域:浏览器中输入的地址与服务器内部请求资源的地址不同,即地址的协议.IP或域名.端口中的任何一个不相同都属于跨域. JavaScript同源策略:javascript不允许跨域请求,即javascript中的请求地址与浏览器中输入的地址不同域. 二.解决 网上有实现跨域请求的方法,这里我就大概归个类: 1.避免跨域:重新修改请求策略,使其不跨域. 2.同意跨域:设置代理服务器(如nginx)可以实现跨域请求,但是不建议这样做,因为跨域请求会涉及安全问题(js嵌入跨域攻击).