【问题标题】:What are the security risks of Implicit flow隐式流的安全风险是什么
【发布时间】:2017-06-17 17:53:41
【问题描述】:

隐式流被认为是不安全的。我知道两个问题:

  1. Confused deputy。但要克服它,您只需要检查是否将 access_token 提供给您的应用程序。没什么大不了的。
  2. XSS 攻击。因此,如果我们的 access_token 通过 XSS 攻击被盗,它可以用于发出请求(这是我们最初请求的范围的一部分)。这很糟糕,但很难窃取 access_token,因为很可能我们只在登录页面上拥有它,并且没有存储在应用程序状态中,因为它是短暂的(我想这就是隐式工作流不支持刷新令牌的原因)。

看起来还不错。是否还有其他我不知道的安全漏洞?

【问题讨论】:

    标签: oauth-2.0 google-oauth facebook-oauth oauth2


    【解决方案1】:

    正确的说法应该是

    隐式流相对于代码流来说是不安全的。

    如果攻击者想要使用代码流从应用程序中窃取用户访问令牌,那么攻击者必须侵入服务器网络并发现应用程序机密或窃听从服务器到 Google 的网络流量(即 HTTPS)以获得访问令牌。

    在隐含流程中,访问令牌驻留在浏览器中。在这种情况下,攻击者还有许多其他可能窃取令牌而不必破坏网络。

    • XSS(正如您已经解释过的)
    • 困惑的代理问题(正如您已经解释过的)
    • 会话固定问题(在用户 B 的会话中使用用户 A 的令牌。https://www.facebook.com/FacebookforDevelopers/videos/10152795636318553/
    • redirect_url 参数操作
    • (可能)令牌泄漏与引用标头
    • 各种网络钓鱼和社会工程的可能性来欺骗用户泄露他们的访问令牌(比询问他们的密码更容易)

    但正如您所说,如果您是一名具有安全意识的开发人员,那么减轻所有这些错误是很简单的。但是,如果您实施隐式流程,这些漏洞仍然存在。因此,如果您不将令牌传递给浏览器并在服务器端组件(代码流)中处理令牌,这可能是一个好主意。

    【讨论】:

    • 您写道,相对于代码流而言,隐式流是不安全的。我理解代码流是指将代码流与机密客户端(后端)一起使用。第三个选项怎么样:将代码流与公共客户端(例如 SPA)一起使用,即没有秘密。这意味着刷新令牌被传递到浏览器。这比隐式流更糟糕还是一样?
    • 你说得对,我的意思是在代码流场景中使用机密客户端。对于您的问题,我只能以“理论上”的形式回答,因为我认为这完全取决于实施的安全强化。所以“理论上”我认为向浏览器提供刷新令牌比提供访问令牌更危险。原因:刷新令牌比访问令牌具有更长的生命周期。访问令牌的有效期可以持续一个小时左右,但刷新令牌的有效期可以长达数月。所以危险性很高。
    • “在隐式流程中,访问令牌驻留在浏览器中。” - 在混合流中,令牌是否也不驻留在浏览器中?这些客户端流程中的任何一个都不是将令牌存储在客户端上,以便它可以在不通过服务器的情况下调用安全服务吗?
    • 没错。这两种情况都使用浏览器端令牌处理,除了在混合流程中,您会得到一个代码,您可以在第二步中使用该代码来请求令牌,这比隐式令牌检索更安全。我会相应地更新答案。
    • 在没有安全方式存储客户端机密的公共客户端的情况下,仍然可以使用 PKCE 保护授权码流。请参阅rfc-editor.org/rfc/pdfrfc/rfc7636.txt.pdfoauth.com/oauth2-servers/pkce
    猜你喜欢
    • 2011-03-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多