gpt4 book ai didi

javascript - 对跨源资源共享 (CORS) 的工作方式感到困惑

转载 作者:数据小太阳 更新时间:2023-10-29 06:11:23 26 4
gpt4 key购买 nike

根据我对 CORS 的了解,它是这样工作的:我有一个站点 foo.com,它提供一个页面 X。X 想将数据发布到另一个域 bar.com。如果 bar.com 启用了 CORS(其 header 生成 Access-Control-Allow-Origin foo.com),那么页面 X 现在可以将数据发送到 bar.com。

据我了解,要让 CORS 正常工作,一切都与在 bar.com 上进行设置有关,与 foo.com 无关。这一切都是为了确保 bar.com 不接受来自任何旧域的请求。

但是这真的对我来说没有意义。我认为 CORS 旨在使 foo.com 能够决定允许 X 与谁通信。如果我们回到前面的示例,但这次 X 被狡猾的脚本破坏,因此它 secret 地将数据发送到 evil.com,CORS 将如何阻止它? evil.com 启用了 CORS,并设置为 *,因此它将接受来自任何地方的请求。这样一来,用户认为他们使用的是网站 foo.com,却无意中将数据发送到 evil.com。

如果真的是关于 bar.com 保护自己,那么它为什么要让浏览器执行该策略?。如果你有 evil.com 提供页面 Y 来模拟 foo.com,并试图将数据发送到 bar.com,那么这是唯一可以想象的情况。但是 CORS 是由浏览器强制执行的,你所要做的就是让 evil.com 成为一个代理,向 bar.com 发送伪造的来源请求(数据从 Y 到 evil.com,evil.com 将其伪造的来源设置为 foo .com 然后将其发送到 bar.com)。

只有反过来才有意义。 foo.com 启用了 CORS,其 header 设置为 Access-Control-Allow-Origin bar.com。这样浏览器就会拒绝访问 evil.com。然后,浏览器执行该策略是有意义的,因为它运行的脚本可能会出错。它不会阻止 rouge 网站试图将 rouge 数据发送到 bar.com,但 bar.com 可以使用用户名/密码来保护自己。如果 foo.com 的端点期望从 X 返回数据,那么您可以将 token 嵌入到 X 中,以确保 evil.com 不会向它发送数据。

我觉得我没有理解这里最重要的事情。非常感谢您的帮助。

最佳答案

However this really doesn't make sense to me. I thought CORS was designed to enable foo.com to dictate who X is allowed to communicate with.

不,这是关于 bar.com 控制对其内容的使用。

But CORS is enforced by the browser, all you'd have to do is make evil.com a proxy that sends faked origin requests to bar.com...

是的。如果您这样做,并且 bar.com 的人员注意到并关心,他们将拒绝来自您的服务器的请求。你移动它,他们不允许新的。打地鼠时间。但是,尽管这种打地鼠游戏很痛苦,但与请求直接来自 foo.com 的每个用户(从他们的桌面)相比,痛苦要小得多。

让 foo.com 强制执行 foo.com 可以做的事情没有任何意义。 foo.com 已经强制执行 foo.com 可以做的事情,因为 foo.com 为 foo.com 的内容和脚本提供服务。

关于javascript - 对跨源资源共享 (CORS) 的工作方式感到困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27583161/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com