spring boot项目怎么预防CSRF攻击
Spring Boot 项目可以通过集成 Spring Security 来防止 CSRF 攻击。以下是一个简单的配置示例:
- 在
pom.xml
中添加 Spring Security 依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
- 在
application.properties
或application.yml
中启用 CSRF 保护:
# application.properties
spring.security.csrf.enabled=true
- 在你的安全配置中,确保你有一个
WebSecurityConfigurerAdapter
实现,并且在配置中添加.csrf()
方法:
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http
// ... 其他配置 ...
.csrf()
.csrfTokenRepository(CookieCsrfTokenRepository.withHttpOnlyFalse())
.ignoringAntMatchers("/some/endpoints") // 可以忽略特定的URL
// ... 其他配置 ...
;
}
}
- 确保你的 HTML 表单包含 CSRF 令牌字段:
<form th:action="@{/submit}" method="post">
<!-- CSRF 令牌隐藏字段 -->
<input type="hidden" name="${_csrf.parameterName}" value="${_csrf.token}" />
<!-- 其他表单字段 -->
</form>
- 如果你使用的是 Thymeleaf,确保你的模板布局中包含 CSRF 令牌的处理:
<!-- 导入 CSRF 的命名空间 -->
<html xmlns:th="http://www.thymeleaf.org">
<!-- 在 head 或 body 中添加 CSRF 令牌 -->
<input type="hidden" th:name="${_csrf.parameterName}" th:value="${_csrf.token}" />
</html>
这样配置后,Spring Security 会自动为每个经过身份验证的会话生成一个 CSRF 令牌,并要求所有 POST 请求携带这个令牌,以此来防止 CSRF 攻击。
评论已关闭