我想制作有关HTML / JS 同源策略的社区Wiki,以希望能帮助任何人搜索此主题。这是关于SO的最热门搜索主题之一,并且没有统一的Wiki,所以我在这里:)
相同的来源策略可防止从一个来源加载的文档或脚本从另一个来源获取或设置文档的属性。该策略可以追溯到Netscape Navigator 2.0。
请保持详细示例,并最好也链接您的资源。
document.domain
方法请注意,这是一个iframe方法,用于将document.domain的值设置为当前域的后缀。如果这样做,则将较短的域用于后续的来源检查。例如,假设文档中的脚本在http://store.company.com/dir/other.html
执行以下语句:
document.domain = "company.com";
执行该语句后,页面将通过进行原点检查http://company.com/dir/page.html
。但是,出于同样的原因,company.com无法设置document.domain
为othercompany.com
。
使用此方法,您可以从源于主域的页面上的子域的iframe中提取javascript。此方法不适用于跨域资源,因为Firefox之类的浏览器不允许您将更document.domain
改为完全异类的域。
来源:https
:
//developer.mozilla.org/en/Same_origin_policy_for_JavaScript
跨域资源共享(CORS)是W3C工作草案,它定义了跨源访问源时浏览器和服务器必须如何通信。CORS背后的基本思想是使用自定义HTTP标头,以允许浏览器和服务器之间相互了解足够多,以确定请求或响应是成功还是失败。
对于一个简单的请求,该请求使用GET
或POST
不使用任何自定义标头,并且其主体为text/plain
,则发送一个带有的附加标头的请求Origin
。Origin头包含请求页面的来源(协议,域名和端口),以便服务器可以轻松确定是否应提供响应。Origin
标头示例可能如下所示:
Origin: http://www.codingdict.com
如果服务器决定应允许该请求,则它将发送Access-Control-Allow- Origin
标头,以回显与发送的原始源相同的消息,或者*
它是公共资源。例如:
Access-Control-Allow-Origin: http://www.codingdict.com
如果缺少此标头,或者来源不匹配,则浏览器将拒绝该请求。如果一切顺利,则浏览器将处理请求。请注意,请求和响应均不包含Cookie信息。
Mozilla团队在其有关CORS的帖子中建议您应检查withCredentials
属性是否存在,以确定浏览器是否通过XHR支持CORS。然后,您可以结合XDomainRequest
对象的存在来覆盖所有浏览器:
function createCORSRequest(method, url){
var xhr = new XMLHttpRequest();
if ("withCredentials" in xhr){
xhr.open(method, url, true);
} else if (typeof XDomainRequest != "undefined"){
xhr = new XDomainRequest();
xhr.open(method, url);
} else {
xhr = null;
}
return xhr;
}
var request = createCORSRequest("get", "http://www.codingdict.com/");
if (request){
request.onload = function() {
// ...
};
request.onreadystatechange = handler;
request.send();
}
请注意,要使CORS方法起作用,您需要有权访问任何类型的服务器头机制,并且不能简单地访问任何第三方资源。
来源:http://www.nczonline.net/blog/2010/05/25/cross-
domain-ajax-with-cross-origin-resource-
sharing/
window.postMessage
方法window.postMessage
,当被调用时,导致MessageEvent
在必须执行的任何待处理脚本完成时(例如,如果window.postMessage
从事件处理程序调用了剩余的事件处理程序,先前设置的待处理超时等),在目标窗口处调度a
。的MessageEvent
具有类型消息,data
其被设置为提供到所述第一参数的字符串值属性window.postMessage
,一个origin
对应于窗口调用主文档的原点属性window.postMessage
在时间window.postMessage
被调用,并且一个source
属性,该属性是窗口从它window.postMessage
被调用。
要使用window.postMessage
,必须附加事件监听器:
// Internet Explorer
window.attachEvent('onmessage',receiveMessage);
// Opera/Mozilla/Webkit
window.addEventListener("message", receiveMessage, false);
并且receiveMessage
必须声明一个函数:
function receiveMessage(event)
{
// do something with event.data;
}
异地iframe还必须通过postMessage
以下方式正确发送事件:
<script>window.parent.postMessage('foo','*')</script>
无论文档在窗口中的位置如何,任何窗口都可以随时在任何其他窗口上访问此方法,以向其发送消息。因此,用于接收消息的任何事件侦听器都必须首先使用origin属性和可能的source属性检查消息发送者的身份。这不能低估:
无法检查origin
和可能的source
属性将启用跨站点脚本攻击。
来源:https :
//developer.mozilla.org/en/DOM/window.postMessage
问题内容: 在实际尝试使用ajax方法之前,是否存在“安全”的方法来检查同一原始策略是否适用于URL?这是我所拥有的: 这种工作,但是基于Wikipedia文章,是一种手动猜测。有没有更好的方法来预先检查跨网域配额?jQuery可以使用。 问题答案: 有趣的问题!我四处搜寻,除了您发布的内容外,什么也找不到,但是当我弄乱一些测试代码时,我确实遇到了这一点。如果您只是想要一种简单的方法来测试URL而
新手入门 - 隐私政策合规要求解读 注意:请您知悉并理解,本解读仅供您参考,由于立法和监管政策的变化,可能导致合规要求更新,请您按照最新生效的法律法规、监管政策文件或相关标准的规定执行。本平台不对您的隐私合规行为承担任何责任。 《隐私政策》应当明确告知用户App处理用户个人信息的目的、方式和范围,如果您的APP中存在第三方提供的服务处理用户个人信息,还应当对第三方服务处理个人信息的活动进行明确告知
引言 小牛知识库(以下或称“我们”)非常重视您的隐私保护,您在使用我们的业务平台(xnip.cn)的产品和服务时,我们可能会收集和使用您的相关信息。我们希望通过本《隐私政策》向您说明,我们如何收集、使用、存储及共享您的个人信息,以及您如何访问、更新、控制和保护您的个人信息。 本《隐私政策》与您使用我们的服务关系紧密,希望您仔细阅读并理解,做出您认为适当的选择。您使用或继续使用我们的服务,即意味着您
我有一条小路线,我想使用自定义的重新传递策略来重复向endpoint发送消息,但这种行为非常奇怪。看起来,重新交付政策只是在重复一个错误。我试图将所有交换发送到路由的开头,但策略不起作用,因为每次都在创建: 我做错了什么?当错误发生时,我想以间隔重复我的请求。我的骆驼版本是2.6 日志:
我是单点登录 (SSO) 概念的新手。我开始知道 SAML 请求和响应是实现 SSO 过程的最佳方式。然后我开始阅读有关SAML2.0的内容。我在 saml2.0 中发现了一个术语 NameIdPolicy,这在 saml1.0 中是不存在的。 定义说这是我们从IdP请求的NameID的格式,我想知道该格式是什么?我的意思是来自IDP的哪些数据应该以NameIDPolicy指定的格式出现?任何人都
您的隐私对我们很重要。 Cassbin的政策是尊重我们在我们的网站上从您那里收集的任何信息的隐私权,包括https://casbin.org和我们拥有并管理的其他站点 我们只是在我们真正需要你的信息向你提供服务时才要求你提供您的个人信息。 我们在你知情和同意的情况下,以公正和合法的方式加以收集。 我们还告诉你我们为什么要收集以及如何使用它。 我们只在必要的时候保留您的信息来为您提供您请求的服务 无