spring-security CSRF保护,带角型+ Spring Boot + REST + JWT

fiei3ece  于 2022-11-11  发布在  Spring
关注(0)|答案(1)|浏览(236)

我正在使用一个Angular + Sping Boot 应用程序,我使用JWT进行授权(令牌存储在一个http only cookie中),后端完全使用REST服务开发。现在我正在尝试使用Spring Security的CSRF保护,但我不明白它是如何工作的。每次请求都会生成一个新的XSRF-TOKEN,但即使您手动更改或删除它,后续的请求也总是成功的。
这是我关于CSRF的代码片段(即所有指南上所写的内容):

http = http.cors().and().csrf().csrfTokenRepository(this.getCsrfTokenRepository());

...

private CsrfTokenRepository getCsrfTokenRepository() {
    CookieCsrfTokenRepository tokenRepository = CookieCsrfTokenRepository.withHttpOnlyFalse();
    tokenRepository.setCookiePath("/");
    return tokenRepository;
}

我哪里做错了?

iyzzxitl

iyzzxitl1#

您没有做错任何事情。当您使用withHttpOnlyFalse配置CookieCsrfTokenRepository时,这意味着您使用双重提交cookie方法进行CSRF验证,而不是典型的同步器模式。
在同步器模式中,传入令牌与会话中存储的令牌匹配。使用CookieCsrfTokenRepository时,将检查是否存在名为CSRF_TOKEN的cookie和标头名称X_XSRF_TOKEN以及**(如果它们的值与匹配)。请注意,cookie名称和标头名称可能不准确,但此处的要点是会话中没有可供匹配的特定值。
这意味着,如果我发送一个值为A的令牌或值为A的cookie(A与Spring安全性发送的cookie中存储的值不同),请求将通过,因为它只检查头和cookie值是否相同,而不检查它生成的值。
不是**安全漏洞。这是双重提交cookie方法的工作原理。

相关问题