gpt4 book ai didi

javascript - Facebook 登录如何确保您的 Web 应用程序只能从您的 URL 使用?

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:32:49 26 4
gpt4 key购买 nike

当您将 Facebook 登录与网络应用程序集成时,您可以在 Facebook 的应用程序设置中指定网络应用程序的 URL。尝试在不是从该 URL 加载的页面上使用该应用程序的 ID 会给出相应的错误:“应用程序配置不允许给定的 URL。”

他们如何做到这一点而不让击败它变得微不足道?如果应用程序在 http://example-a.com 上获得授权,如果我复制应用程序 ID 并尝试从 http://example-b 使用它,他们将如何阻止访问.com?我试图了解他们是如何做到这一点的,因为我需要在我正在做的一些工作中进行类似的 lock-down-by-originating-URL。

我有一种强烈的错觉。

我知道他们正在使用授权/身份验证流程“based onOAuth 2.0 spec (以及基本流程 isn't exactly complicated ),但我无法确定他们在该流程的哪个阶段验证了原始页面的 URL 以及他们如何将该 URL 发送到他们的服务,同时确保它没有被篡改/欺骗。

我(认为我已经)消除的东西:

  1. 虽然我看到它们绕过原始域(在查询字符串等中),但它们不能仅依赖于此,修改调用代码以“调整”它是微不足道的。我希望这是解决方案的一部分,但只是其中的一部分。

  2. 他们不能使用 Referer (sic) header ,因为这很容易被欺骗。

  3. 他们不能(仅)使用在原始页面中运行的代码,因为可以对其进行修改。

  4. 他们不能只依赖于 postMessage,因为 Facebook Login 可以在 IE8/9 上运行,而且它是一个弹出窗口(不仅仅是一个框架); IE8/9 中的 postMessage only works within frames ,而不是单独的选项卡/窗口。

最佳答案

当我在问题中写下我的第四个要点时,我意识到他们可以做什么(并且检查教会了我一些关于 postMessage 的非常有用的事情)。

我认为他们大致是这样做的:

  • 加载到原始页面的 Facebook 代码(当然,它可能被黑客攻击——但稍后会处理)添加一个 iframemumble.facebook.com 加载到原始页面; iframe包含登录按钮。

  • 原始页面上的 Facebook 代码使用 postMessage和那个说话iframe .

  • iframe 中的代码— 原始站点无法合理破解,因为它是从 mumble.facebook.com 加载的— 使用 origin它使用 postMessage 接收的事件对象的属性来自原始页面的消息;这就是它如何拥有原始来源的可靠版本。这不能被欺骗(除非浏览器错误)。

  • iframe 中的登录按钮打开一个弹出窗口(从 mumble.facebook.com 加载),它使用 opener (但不是 postMessage )与 iframe 交谈(由于 iframe 和弹出窗口是从同一个来源加载的,所以它们可以这样做——而且由于 IE8/9 的问题,它们必须这样做而不是 postMessage)。

  • 然后是交互:

    +------------------+    +--------+    +-------+| Originating page |<-->| iframe |<-->| popup |<------++------------------+    +--------+    +-------+       |                             ^                        v                             |                   +---------------------+                             +------------------>| mumble.facebook.com |                                                 +---------------------+

基本上,iframe是原始页面和弹出窗口(以及一般的 Facebook)之间的代理,并且在那个阶段(原始页面和 iframe 之间的通信)Facebook 获得原始页面来源的可靠版本。

我相信他们将原始来源传递给了 iframe作为查询参数作为添加的度量; iframe可能将它用于它回发到原始页面的任何消息,因此如果查询参数被黑客攻击,原始页面永远不会收到这些消息,并且没有任何效果。或者他们只是比较它们。

event.origin不能被欺骗(除非浏览器错误),以及 iframe 的代码和标记等弹出窗口来自 mumble.facebook.com ,它相当安全可靠(在 Web 浏览器领域内“相当”)。

关于javascript - Facebook 登录如何确保您的 Web 应用程序只能从您的 URL 使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23395526/

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