spring 安全性使用哪种机制来处理 CSRF 令牌
Which mechanism to use for CSRF token handling with spring security
我不熟悉 Web 安全和使用 spring-security 实现相同的功能。一个重要的概念是使用 CSRF 令牌防止 CSRF。 Spring security提供了两种管理CSRF token的方法
- CookieCsrfTokenRepository
- HttpSessionCsrfTokenRepository
但是我无法理解应该使用哪一个,因为我可以看到这两种方法的缺点。
- CookieCsrfTokenRepository 要求在 cookie 中仅将 HTTP 属性 设置为 false,以便 javascript 可以读取它并将其添加到进一步的请求中。但是根据我的理解,不建议将 http only 设置为 false,因为恶意脚本也可以读取 cookie 并在伪造请求中共享相同的令牌。
- HttpSessionCsrfTokenRepository 正在会话中存储 csrf 令牌。在这种情况下,我们需要在分布式环境中引入会话粘性或会话复制,但建议使用无状态应用程序。
所以请大家告诉我我上面的理解是否正确。如果正确,我们需要哪个选项 select 来实现 csrf 令牌。
However as per my understanding, setting http only as false is not recommended as malicious script can also read the cookie and share the same token in the forged request.
如果 a) 您的网站存在 XSS 漏洞或 b) 您没有设置 cookie 的域,我相信这会是正确的。你剩下的问题对我来说似乎 opinion-based。
however recommendation is to go for stateless application.
注意:以下仅是我对此事的看法,因为一般来说很难争论for/against无国籍。
这是一个安全需要状态的示例,因此为了保护 csrf 令牌并避免您对 cookie 的担忧,您需要服务器上的状态并且应该选择会话。
我不熟悉 Web 安全和使用 spring-security 实现相同的功能。一个重要的概念是使用 CSRF 令牌防止 CSRF。 Spring security提供了两种管理CSRF token的方法
- CookieCsrfTokenRepository
- HttpSessionCsrfTokenRepository
但是我无法理解应该使用哪一个,因为我可以看到这两种方法的缺点。
- CookieCsrfTokenRepository 要求在 cookie 中仅将 HTTP 属性 设置为 false,以便 javascript 可以读取它并将其添加到进一步的请求中。但是根据我的理解,不建议将 http only 设置为 false,因为恶意脚本也可以读取 cookie 并在伪造请求中共享相同的令牌。
- HttpSessionCsrfTokenRepository 正在会话中存储 csrf 令牌。在这种情况下,我们需要在分布式环境中引入会话粘性或会话复制,但建议使用无状态应用程序。
所以请大家告诉我我上面的理解是否正确。如果正确,我们需要哪个选项 select 来实现 csrf 令牌。
However as per my understanding, setting http only as false is not recommended as malicious script can also read the cookie and share the same token in the forged request.
如果 a) 您的网站存在 XSS 漏洞或 b) 您没有设置 cookie 的域,我相信这会是正确的。你剩下的问题对我来说似乎 opinion-based。
however recommendation is to go for stateless application.
注意:以下仅是我对此事的看法,因为一般来说很难争论for/against无国籍。
这是一个安全需要状态的示例,因此为了保护 csrf 令牌并避免您对 cookie 的担忧,您需要服务器上的状态并且应该选择会话。