Tag: same origin policy

window.name作为数据传输:一个有效的方法?

概述和原始问题 window.name是一个有趣的野兽。 MDN的描述暗示了最初的意图: 窗口的名称主要用于设置超链接和窗体的目标。 Windows不需要有名字。 所以,这意味着我们可以在这个窗口中打开控制台,并写下: var win = window.open('http://google.com', 'el goog'); …然后让它通过popup式窗口拦截器,该窗口应该在名为“el goog”的窗口中打开google.com。 由于同源策略,我无法访问win的name属性,但是如果我在新窗口中打开一个控制台并inputname ,我会得到"el goog" 。 如果我把窗口发回到我打开的域名(在这个例子中是stackoverflow.com),我可以得到name属性,而且没有改变。 win.location.replace(location.href); win.name; // "el goog" 这意味着我们可以通过设置窗口的name属性来拥有一种跨域的会话存储。 如果google.com在窗口被发回到原始域之前更改了window.name的值,我们将看到新值而不是“el goog”。 这可以用作跨域数据传输,类似于JSONP或CORS的实用程序。 我做了一些search试图find更多的信息,显然dojo 认为它是合法的运输。 但不知何故,这并不能完全让我放心。 所以我的问题是,是否有信誉的网站使用window.name作为数据传输? 我认为这很容易被发现,因为他们的文档会给JSONP的查询string添加“callback”,或者为window.name添加“whatever”,但是我从来没有见过类似的东西。 有没有人真的发现这在野外? 备选问题 可能没有人真正使用这种技术, 如果那是真的(正如Rob W指出的那样),上面的问题是无法回答的。 所以,我的另一个问题是,这种方法有什么问题? 这可能有助于解释为什么它没有被真正采用。 正如我所看到的,与JSONP相比,这种方法至less有两个好处。 使用JSONP,您可以信任来自外国的脚本,以便在您的域上运行。 使用window.name ,恶意网站包含的任何脚本都可以在自己的域上运行。 使用JSONP,没有办法传入大数据(对于一个URL来说太大),也没有办法做一个HTTP POST。 使用window.name ,我们可以发布任意大小的任意数据。 有什么缺点? 示例实现 这是客户端实现的一个非常简单的例子。 这不处理POST请求,只有GET。 function fetchData(url, callback) […]

跨域表单发布

我已经看到关于这个主题的文章和post(包括SO),而且主stream的评论是同源策略阻止跨域的POST表单。 我见过的唯一一个人提出,同源政策不适用于形成职位, 在这里 。 我想有一个更“官方”或正式来源的答案。 例如,有没有人知道解决如何同源或不影响表单POST的RFC? 澄清 :我不是问一个GET或POST是否可以构build并发送到任何域。 我问: 如果Chrome,IE或Firefox允许来自域“Y”的内容向域“X”发送POST, 如果接收POST的服务器实际上将看到任何表单值。 我这样说是因为大多数在线讨论logging的testing者说服务器收到post,但是表单的值都是空的/剥离的。 什么官方文档(即RFC)解释了什么预期的行为(无论浏览器目前实施)。 顺便说一句,如果同源不影响表单邮政 – 那么它为什么需要防伪令牌更为明显。 我说“有点”,因为看起来太容易相信攻击者可以简单地发出一个HTTP GET来检索包含反伪造标记的表单,然后做一个包含相同标记的非法POST。 注释?

如何规避同源政策

相同的来源政策 我想制作一个关于HTML / JS 同源策略的社区wiki,希望能帮助任何人search这个主题。 这是SO上search最多的主题之一,没有合并的wiki,所以在这里我去:) 相同的来源策略可防止从一个来源加载的文档或脚本从另一个来源获取或设置文档的属性。 这个政策可以追溯到Netscape Navigator 2.0。 什么是你最喜欢的方式来绕过同源政策? 请保持详细的例子,最好也链接你的来源。