在基于OAuth2的身份验证中,状态参数可防止哪种CSRF攻击?

问题描述 投票:0回答:1

我正在使用Google OAuth2 API进行身份验证。我正在使用“服务器”流,而不是“隐式”。

[在实现用于获取code准则的步骤1时,建议使用state参数以确保最后,服务提供商将收到与其发起的身份验证请求相关的响应。

请参见https://developers.google.com/identity/protocols/OpenIDConnect#createxsrftoken

我知道code有可能被盗,并且redirect_uri被猜到了。

但是我不明白为什么将这称为反CSRF保护?

根据wiki CSRF攻击“充分利用了网站在用户浏览器中的信任”。据我了解,应该在浏览器中保留一些敏感内容,以使CSRF攻击成为可能。最经典的示例-身份验证Cookie。

但是浏览器中与OpenID连接代码流有关的内容是什么?这只是从服务提供者到身份提供者再返回的两次结果重定向。代码本身作为URL参数在回调中传递。浏览器的角色是被动的-要重定向两次。什么都没有存储在这里。

所以我的问题是state到底能阻止哪种CSRF攻击?任何人都可以举一个详细的例子吗?还是只是滥用Google准则中的“ CSRF”一词?

security authentication google-oauth csrf openid-connect
1个回答
0
投票

CSRF的目的是通过单击攻击者发送的链接,欺骗用户在网站中执行操作(通常是用户在正常情况下不会执行的破坏性写操作)。此类活动的一个示例是删除网站中用户自己的帐户。假设用户已登录网站,则来自该用户浏览器的请求将受到该网站服务器的信任,该服务器无法(实际上没有CSRF令牌)查明该用户实际上是由该用户发出的。

[对于Google OAuth2(授权码授予类型),请注意,对Google Auth服务器的初始请求包含用户在成功进行身份验证后实际要访问的URL。攻击者可以出于恶意目的精心构造该URL,并让用户使用它。

状态令牌检查使服务器能够确保请求确实来自其自己的网站,而不是来自其他任何地方。如果攻击者使用一些随机状态令牌创建该URL,则服务器将无法识别该URL并拒绝该请求。

© www.soinside.com 2019 - 2024. All rights reserved.