跨站请求伪造(CSRF)是一种常见的 Web 安全漏洞,允许攻击者代表用户执行未经授权的操作。在Spring Boot 中通过使用 Spring Security来保护应用程序免受 CSRF 攻击。在本文中,我们将演示如何在 Spring Boot 应用程序中使用Security的 Java 代码示例实现 CSRF 保护。
在开始之前,请确保已经添加了 Spring Boot的依赖项。
“Spring Web”
“Spring Security”
步骤 1:Maven 依赖项(pom.xml)
确保您的 pom.xml 文件包含必要的依赖项。以下是 pom.xml 应包含的依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
</dependencies>
步骤 2:Controller示例
在 Spring Boot 程序中创建一个控制器来处理表单的渲染和表单提交。此控制器还为HTML 表单生成 CSRF 令牌:
@Controller
@RequestMapping("/example")
public class ExampleController {
// 访问表单
@GetMapping("/form")
public String showForm() {
return "csrf-form";
}
// 提交表单
@PostMapping("/submit")
public String processForm() {
return "success";
}
}
步骤 3:HTML 表单
使用 Thymeleaf(任意模板引擎都可以)创建一个包含 CSRF 令牌的 HTML 表单。CSRF 令牌确保提交的表单来源于自己的应用程序,而不是来自恶意来源。以下是示例表单:
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:th="http://www.thymeleaf.org">
<head>
<title>CSRF 表单示例</title>
</head>
<body>
<h1>CSRF 表单示例</h1>
<form action="/example/submit" method="post">
<label for="data">数据:</label>
<input type="text" id="data" name="data">
<!-- 此处是关键代码,包含 CSRF 令牌 -->
<input type="hidden" th:name="${_csrf.parameterName}" th:value="${_csrf.token}">
<button type="submit">提交</button>
</form>
</body>
</html>
步骤 4:Security配置
要启用 Spring Security 并配置 CSRF 保护,您需要创建一个配置类。此类定义了程序中CSRF的处理方式,包括 CSRF 保护。以下是示例配置:
@Configuration
@EnableWebSecurity
public class SecurityConfig {
@Bean
public CsrfTokenRepository csrfTokenRepository() {
HttpSessionCsrfTokenRepository repository = new HttpSessionCsrfTokenRepository();
repository.setHeaderName("X-XSRF-TOKEN");
return repository;
}
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.antMatchers("/example/form").permitAll()
.anyRequest().authenticated()
.and()
.formLogin()
.and()
.csrf()
.csrfTokenRepository(csrfTokenRepository());
}
}
步骤 5:测试
在加入 CSRF 保护后,测试程序效果至关重要。确保您的表单请求的确包含了 CSRF 令牌,并从不同来源测试表单提交,以验证 CSRF 令牌验证是否按预期的执行。
结论
简而言之,保护你的 Spring Boot 应用程序免受 CSRF 攻击非常重要。使用Spring Security 使此过程变得简单且安全。通过遵循本文中的步骤,包括将正确的依赖项添加到项目中,则可以确保应用程序受到Security的保护。最后请记住根据项目需求调整代码,并始终将安全性放在首位。