是否可以将同站点属性添加到 Spring Security CSRF 的 .csrfTokenRepository(CookieCsrfTokenRepository.withHttpOnlyFalse())

Mar*_*123 5 csrf spring-security spring-boot

我的安全配置有以下行:

...csrfTokenRepository(CookieCsrfTokenRepository.withHttpOnlyFalse())...
Run Code Online (Sandbox Code Playgroud)

每个请求都会发送一个 csrf cookie 给客户端。此 cookie 没有设置同站点属性。是否也可以添加同站点属性?我查看了该类中的一些方法,据我所知,没有任何额外属性。

如何才能做到这一点?

Nat*_*Far 7

不幸的是,从版本 4.0.1 开始,servlet-api不允许您将该Same-Site属性添加到Cookie. 希望这种情况很快就会改变。

但与此同时,您可以提供自己的CsrfTokenRepository实现,而不是添加 a CookieHttpServletResponse从而受到 servlet-api 的 cookie 表示形式的限制),而是直接在 HTTP 标头中设置 cookie:

public class CustomCsrfTokenRepository implements CsrfTokenRepository {
    // implement other methods...

    @Override
    public void saveToken(CsrfToken token, HttpServletRequest request,
            HttpServletResponse response) {

        // some version of this:
        response.setHeader("Set-Cookie", "HttpOnly; SameSite=strict");
    }
}
Run Code Online (Sandbox Code Playgroud)

您可以看一下CookieCsrfTokenRepository以填补空白。