问题标签 [same-origin-policy]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
14683 浏览

javascript - 同源策略 - AJAX 和使用公共 API

我知道是否在我自己的网页上,如果我的用户在: http ://www.example.com/form.php

我从该页面发出 ajax 请求: http ://example.com/responder.php

由于同源策略(子域不同),它将失败。

我想了解的是,当请求和服务器明显不同时,AJAX 请求如何从 flickr 之类的 API 中提取数据。


编辑:

例如:为什么这段代码有效?

参考此社区 Wiki)是否使用跨域资源共享

谢谢!

0 投票
1 回答
853 浏览

javascript - 跨域脚本标签在 FF 和 Chrome 中工作,但在 IE 中不工作

我们提供了一个 HTML 片段,我们的客户可以将其嵌入到他们的网站上,以回调我们的 API。这个 HTML 是一个简单的表单和一个 Javascript 文件,托管在我们的服务器上。

这是客户在其网站 (clientsite.com) 上托管的内容:

当调用 makeCallback 时,托管在 mysite.com 上的脚本会执行以下操作:

请注意,脚本的域和 XHR 请求的域是相同的,但承载表单和脚本标记的 HTML 位于 clientsite.com。

这在 FF 和 Chrome 中运行良好,但在 IE 中我收到拒绝访问错误。我想它与同源策略有关,但我试图理解为什么这在 FF 和 Chrome 中有效,但在 IE 中无效。有什么办法让它在 IE 中工作?

谢谢

0 投票
4 回答
1611 浏览

security - 安全实施脚本标签黑客来做 XSS?

像许多开发人员一样,我想让服务器“A”提供的 JavaScript 与服务器“B”上的 Web 服务通信,但被当前同源策略的化身所阻碍。克服这个(我能找到的)最安全的方法是一个服务器脚本,它位于服务器“A”上并充当它和“B”之间的代理。但是如果我想在各种客户环境(RoR、PHP、Python、.NET 等)中部署这个 JavaScript 并且不能为所有这些环境编写代理脚本,我该怎么办?

有人说,使用 JSONP 。好吧,Doug Crockford在他的网站采访中指出,脚本标签 hack(JSONP 使用)是绕过同源策略的不安全方法。“A”提供的脚本无法验证“B”是他们所说的身份以及它返回的数据不是恶意的或将捕获该页面上的敏感用户数据(例如信用卡号)和传给卑鄙的人。这似乎是一个合理的担忧,但如果我只使用脚本标签本身并严格使用 JSON 进行通信怎么办?那安全吗?如果不是,为什么不呢?使用 HTTPS 会更安全吗?示例场景将不胜感激。

附录:需要支持 IE6。第三方浏览器扩展不是一种选择。让我们继续解决脚本标签黑客的优点和风险,拜托。

0 投票
1 回答
396 浏览

javascript - 获取 URL 的安全来源

我正在编写一个 Chrome 扩展程序,并希望能够清理给定的 url,以便获得它们的安全来源。使用 location.host 似乎可以完成这项工作,但它并不总是可用 - 例如,如果我想获取 IFrame 元素的来源,则调用将被阻止。

看看WebKit 的源代码,这似乎不是一件容易的事。我可以使用 JavaScript、C++ 或 Chrome 的 API(使用 WebKit 的代码太过分了,因为它会拖拽另外一吨文件)。

0 投票
2 回答
3335 浏览

javascript - 外部 js 文件中的同源策略

如果在网站http://www.mysite.com中有一个外部 js 文件添加为

http://www.yoursite.com/new.jsjs 文件中,有一个对脚本的 ajax 调用http://www.yoursite.com/new.js

在这种情况下是否会出现同源策略安全问题,因为它是从另一个网站调用站点中的脚本?

0 投票
2 回答
1258 浏览

javascript - JavaScript 和 CouchDB - 如何避免 GET/POST/PUT/DELETE 请求上的跨域策略错误

我也在超级用户上发布这个问题。在我看来,这个问题与两者重叠......


我正在为 CouchDB 的 REST-ful 接口创建一个简单的 JavaScript 包装器,但我被困在同源策略问题上。

到目前为止,我一直在开发我的代码以在 Mozilla FireFox 上本地工作 - 并且仅作为概念证明。我的服务器在 localhost 的 5984 端口上运行。

要在 Mozilla FireFox 中禁用跨域策略,您可以使用PrivilegeManager,但它只能让我半途而废,因为我无法对我的服务器执行 PUT 请求......



有什么方法可以配置我的服务器以隐藏它的位置,这样我就不必实施特定于浏览器的解决方法来避免同源策略问题?如果不是:存在哪些浏览器解决方法可以完全禁用同源策略?

0 投票
1 回答
302 浏览

javascript - 浏览器/JavaScript同源策略如何适用于二级域名?

我有一些 JavaScript 在同一域上的两个不同服务器之间共享请求。

.com 是 JavaScript 中域的要求吗?

在这种情况下,两台服务器都在 .abc.tyy 域上,tyy 通常是 .com

想知道我是否只能将 .com 用于域?我收到权限被拒绝错误,但此代码在同一域 (.com) 上的其他单独服务器上运行良好。

更新: 这正是我使用它的方式:

123.abc.tyy 有一个脚本可以加载我想要访问的属性。

123.abc.tyy 上的脚本在打开脚本标记处将 document.domain 设置为“abc.tyy”。

当我在 123.abc.tyy 的脚本 FROM 234.abc.tyy 中调用“getUser()”函数时,出现权限被拒绝错误。

我调用“getUser()”的方式是:我在浏览器中访问http://123.abc.tyy,并且该站点允许我指定要加载到其中一个框架中的 URL。我在该页面中将该 URL 指向http://234.abc.tyy/BeginLoadPatient.aspx “我正在执行以下操作:

window.location = ' http://234.abc.tyy/LoadPatient.aspx?PatientId= ' + getUser() '; getUser 是源自 123.abc.tyy 的函数

如果我将 234.abc.tyy 和 123.abc.tyy 添加到我的受信任站点,一切正常 - 这是跳过同源策略吗?

0 投票
3 回答
797 浏览

javascript - SOP的含义(同源政策)

SOP(Same Origin Policy)的真正含义是什么?

我知道这意味着来自一个来源的 Javascript 代码无法访问来自另一个来源的资源。但是“资源”这个词到底是什么意思呢?例如:

  1. Javascript 代码可以从其他站点访问图像。
  2. Javascript 代码无法向另一方发出 ajax 请求。

但是当您使用 JSON 填充时,在完成填充脚本标记的加载后,第 3 方脚本将调用您指定的回调——来自一个站点的 Javascript 代码正在调用另一个站点的 Javascript 代码的方法。这是否违反了SOP?

0 投票
2 回答
4950 浏览

javascript - 仅跨域破帧,但不适用于来自同一来源的 iframe?

这个问题以前被问过并正确回答,但似乎没有发布解决方案。

如果一个站点有 iframe,并且想要防止这些 iframe 被包含在来自不同域的框架中,那么简单的 frame-busting 将没有用:

但是,由于对其他域的跨框架脚本应该会产生异常,因此在 iframe 中似乎可以很好地工作:

以上if内容本身就足以防止 iframe 的跨域框架。它应该只返回false或抛出异常,那么脚本是否可以throw在浏览器中访问语句?

这是否足以防止仅来自其他域的框架?

编辑:这里暗示了一个类似的解决方案,但不会依赖父框架来包含破坏框架的代码。检测 iframe 何时是跨域的,然后退出它。本质上与“尝试访问其他框架并在发生异常时破坏”相同的解决方案。

0 投票
1 回答
617 浏览

caching - 缓存 SmartGWT 应用程序的静态内容

我正在使用 SmartGWT 框架开发应用程序,该框架将通过 ssl 连接工作。SmartGwt 库足够大,使用 https 可以防止缓存。有没有办法使用 JSONP 通过 http 访问 SmartGwt 应用程序的静态内容?或者,也许您可​​以在这种情况下建议任何其他静态内容缓存方式?

谢谢