CSRF 攻击如何在缺少状态参数和 PKCE 存在的情况下发生是 OAuth 2.0 流程

How CSRF attack can occur with missing State parameter and existence of PKCE is OAuth 2.0 flow

想象一下客户端不提供 state 参数但使用 PKCE 方法的情况。

如何进行 CSRF 攻击?

如果客户端使用PKCE,是否需要state参数?

我读过 https://security.stackexchange.com/a/215027 但它没有提供一个很好的例子。

state 参数是客户端验证的内容,不幸的是,并非每个客户端实现都能正确验证状态参数。所以让客户对此负责是有风险的。

PKCE 由授权服务器验证,他们可能比让客户端验证做得更好。

所以我觉得他们都是互相补充的,所以如果涉及的一方忘记验证,那么另一个保护仍然会覆盖它。

它们的用途略有不同。 PKCE 是一种机制,它允许授权服务器确保为令牌交换授权代码的客户端是启动流程的同一客户端。

状态参数仅供客户端使用。授权服务器不关心它。客户端使用它来验证它从授权服务器获得的令牌响应确实是由该客户端早些时候初始化的。

因此,如果客户端使用 PKCE 但不使用状态,它只能保护自己免受某些攻击向量。这些功能最好一起使用。