隐式流的安全风险是什么?

Sib*_*Guy 10 oauth-2.0 facebook-oauth google-oauth oauth2

隐含流动被认为是不安全的.我知道两个问题:

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

它看起来并不太糟糕.是否还有其他我不知道的安全漏洞?

Sur*_*Att 9

正确的陈述应该是

对于代码流,隐式流是不安全的。

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

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

  • XSS(如前所述)
  • 困惑的副手问题(您已经解释过)
  • 会话固定问题(在用户B的会话中使用用户A的令牌。https://www.facebook.com/FacebookforDevelopers/videos/10152795636318553/
  • redirect_url参数操纵
  • (可能)带有引荐来源标头的令牌泄漏
  • 各种网络钓鱼和社会工程学可能性,诱骗用户泄漏其访问令牌(比要求输入密码更容易)

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

  • “在隐式流程中,访问令牌驻留在浏览器中。” - 令牌是否也不驻留在混合流中的浏览器中?这些客户端流的目的不是将令牌存储在客户端上,以便它可以在不通过服务器的情况下调用安全服务吗? (2认同)