【问题标题】:Why is the HTML SCRIPT tag not subject to the same origin policy为什么 HTML SCRIPT 标签不受同源策略的约束
【发布时间】:2023-03-12 21:41:01
【问题描述】:

我问这个问题是因为我们将开发一个应该通过 javascript 共享跨源数据的应用程序。一种可能的解决方案似乎是 JSONP,因为它使用 SCRIPT 标签从其他域中提取数据。但是,我想避免我们在假设 SCRIPT 标签不受 sop 约束并且在某些时候浏览器禁止此功能的情况下实现我们很棒的代码的情况。

谁能解释一下 SCRIPT 标签允许跨域请求的原因是什么?

【问题讨论】:

  • 标签不受其约束的原因相同。
  • 这个原因是什么以及它如何应用于(可执行)脚本?
  • 同源策略在某种程度上实际上是为什么脚本标签到其他域是安全的。您不会完全不小心在标记中包含脚本标记(希望无论如何都不会),但是如果您不控制它,则无法保证包含的代码的安全性。您可能希望包含一些 JS,以便在您的页面上展示广告,但您不希望该广告网站访问您用户的会话 cookie。
  • @mosch 像这样看...它们以与图像、样式等相同的方式受到 SOP 的约束,因为您无法获取实际数据本身。就像您无法获取跨域样式表的文本内容或带有画布的跨域图像的像素一样,您也无法获取跨域脚本的实际文本内容。在这方面,它遵循相同的规则。但是,是的,包括来自不受信任的第三方的脚本是粗略的。
  • 这是一个有趣的讨论。通过阅读 wikipedia 上的 JSONP,我了解到 Cross-origin resource sharing 作为 JSONP 的现代替代方案。它可以解决您对未来验证您的开发的担忧。

标签: javascript cross-domain standards


【解决方案1】:

我想this draft 标题为“同源政策的原则”解释了(虽然很简短)每个人都在想什么:

原则上,用户代理可以将每个 URL 视为一个单独的主体,并将每个文档与其他所有 URL 隔离,除非文档明确表明它信任该 URL。不幸的是,这种设计对于开发人员来说很麻烦,因为 Web 应用程序通常由许多协同作用的资源组成。

作为一个近似值,用户代理将 URL 组合到称为源的保护域中。特别是,如果两个 URL 具有相同的方案、主机和端口,则它们属于同一来源(即代表相同的主体)。

简而言之:如果一切都遵循 SOP,那么构建 Web 将会更加困难。

【讨论】:

  • 感谢您的富有洞察力的回答,这也是 GGG 的链接似乎暗示的(关于图像)但我没有看到的是为什么我有相同的原产地政策,当有简单的方法可以绕过它时?我怎么能确定 5 年后浏览器仍然让 JSONP 成为可能?
  • @mosch:JSONP 要求客户端和服务器明确合作,并且客户端完全信任服务器;我不会称这是一种简单的方法。使它起作用的是客户端和服务器之间的“协议”,用户代理对此一无所知。这就像在问“我怎么能确定在五年内浏览器仍然不会拒绝从包含 foo 的 URL 加载样式表”。
【解决方案2】:

原因是因为遗产。它是多年前建立的,如果现在改变,太多的网站将会失败。此外,安全隐患是众所周知的,因为它已经存在了很长时间。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-12-27
    • 2012-02-20
    • 2010-12-22
    • 2022-06-29
    • 2017-10-14
    • 2012-07-01
    • 1970-01-01
    • 2023-03-10
    相关资源
    最近更新 更多