5月30日 21:29

Spring Boot 如何正确实现 CSRF 防护?

Spring Boot 里的 CSRF 防护不要一上来就关掉。只要项目还依赖浏览器 Cookie 维持登录态,POST、PUT、DELETE 这类改数据请求就可能被第三方页面借用户身份发出去。正确做法是保留 Spring Security 的 CSRF 校验:服务端生成 Token,前端在表单或请求头里带回,服务端再验证它是否属于当前会话。

追问

CookieCsrfTokenRepository 为什么要 withHttpOnlyFalse?

SPA 需要从 Cookie 读取 Token,再写入 X-CSRF-TOKEN 请求头。代价是脚本也能读到它,所以站点存在 XSS 时风险会被放大。

CSRF Token 和 SameSite 是二选一吗?

不是。SameSite 是浏览器层面的减风险措施,Token 是服务端验证用户意图。敏感业务最好两者都用。

AJAX 一直 403 查哪里?

先看 header 名称是否正确,Spring 常用 X-CSRF-TOKEN。再看 Token 是否来自同一会话,登录刷新、多标签旧页面提交都可能不匹配。

什么时候可以忽略 CSRF?

真正无状态 REST API 使用 Authorization Bearer,浏览器不会自动带这个头,CSRF 风险较低;但 Session Cookie API 不能直接忽略。

写段配置

java
.csrf(csrf -> csrf.csrfTokenRepository(CookieCsrfTokenRepository.withHttpOnlyFalse()))
标签:CSRFSpring Boot