1. CSRF攻击的本质与危害
CSRF(Cross-Site Request Forgery)跨站请求伪造,本质上是一种利用用户已登录状态发起的恶意请求攻击。攻击者诱导受害者在不知情的情况下,以受害者身份向目标网站发送恶意请求。这种攻击之所以危险,是因为它利用了Web应用对用户浏览器的信任机制。
去年某电商平台就曾发生过典型案例:攻击者构造虚假优惠券领取链接,用户点击后自动发起账户余额转账请求。由于用户处于登录状态,服务器无法区分这是用户主动操作还是恶意请求。
CSRF攻击通常具备三个必要条件:
- 用户已登录目标网站并保持会话
- 网站接口未做CSRF防护或防护不足
- 用户被诱导访问恶意页面
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 四种可落地防御方案详解
2.1 同步令牌模式(Synchronizer Token Pattern)
这是目前最可靠的防御方案之一,核心原理是:
- 服务端生成随机令牌(Token)
- 令牌随表单一起返回给客户端
- 客户端提交表单时携带该令牌
- 服务端验证令牌有效性
具体实现示例(Java Spring Security):
java复制@Controller
public class CsrfController {
@GetMapping("/form")
public String showForm(Model model) {
// 生成CSRF令牌
String csrfToken = UUID.randomUUID().toString();
// 存储到session
request.getSession().setAttribute("csrfToken", csrfToken);
// 传递到前端
model.addAttribute("_csrf", csrfToken);
return "form";
}
@PostMapping("/submit")
public String submitForm(@RequestParam("_csrf") String csrfToken,
HttpServletRequest request) {
// 验证令牌
String sessionToken = (String) request.getSession().getAttribute("csrfToken");
if(!csrfToken.equals(sessionToken)) {
throw new RuntimeException("CSRF令牌验证失败");
}
// 处理业务逻辑...
}
}
关键提示:令牌必须满足以下要求才有效:
- 每个会
