第一章:Java安全防护实战(CSRF攻防全解析)
在Web应用开发中,跨站请求伪造(CSRF)是一种常见的安全威胁,攻击者通过诱导用户在已认证的会话中执行非预期的操作。Java平台提供了多种机制来防御此类攻击,其中最有效的是使用同步令牌模式(Synchronizer Token Pattern)和SameSite Cookie策略。防御机制实现步骤
- 生成唯一令牌并在每次会话初始化时绑定到用户
- 将令牌嵌入表单或HTTP头中随请求发送
- 服务器端验证令牌的有效性和匹配性
Spring Security中的CSRF防护配置
Spring Security默认启用CSRF保护,可通过配置类进行定制:// 启用并配置CSRF防护
@Configuration
@EnableWebSecurity
public class WebSecurityConfig {
@Bean
public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
http
.csrf().csrfTokenRepository(CookieCsrfTokenRepository.withHttpOnlyFalse())
.and()
.authorizeHttpRequests(authz -> authz
.requestMatchers("/admin/**").hasRole("ADMIN")
.anyRequest().authenticated()
)
.formLogin();
return http.build();
}
}
// 上述代码将CSRF令牌存储在可被JavaScript访问的Cookie中,便于前端框架使用
SameSite Cookie属性设置
为增强防护,建议设置Cookie的SameSite属性。该属性有三个值:Strict、Lax和None。| 属性值 | 说明 |
|---|---|
| Strict | 完全禁止跨站请求携带Cookie |
| Lax | 允许安全的GET方法跨站请求 |
| None | 允许所有跨站请求,需配合Secure标志 |
graph TD
A[用户访问受信任网站] --> B[服务器返回含CSRF令牌的页面]
B --> C[用户提交表单携带令牌]
C --> D{服务器验证令牌}
D -- 有效 --> E[执行请求操作]
D -- 无效 --> F[拒绝请求并记录日志]
第二章:CSRF攻击原理与常见利用场景
2.1 CSRF攻击的本质与HTTP机制分析
CSRF(Cross-Site Request Forgery)攻击利用了HTTP协议的无状态特性以及浏览器自动携带用户身份凭证(如Cookie)的行为。当用户登录目标站点后,服务器依赖会话Cookie识别身份,而浏览器在跨站请求中仍会自动附加这些凭证。攻击核心机制
攻击者诱导用户访问恶意页面,该页面构造对目标站点的请求(如转账、修改密码),浏览器因同源策略未拦截,自动携带用户会话发起请求,导致服务器误认为是合法操作。典型攻击示例
<img src="https://bank.com/transfer?to=attacker&amount=1000" width="0" height="0">
上述代码隐藏发起GET请求,若银行系统仅依赖Cookie验证身份,则转账将被静默执行。
- HTTP无状态:服务器无法判断请求是否由用户主动发起
- Cookie自动携带:浏览器在跨域请求中仍发送认证信息
- 语义混淆:GET本应只读,但常被滥用为状态变更操作
2.2 常见CSRF攻击手法与实例演示
基于表单的GET请求伪造
攻击者诱导用户点击恶意链接,利用用户已登录的身份发起跨站请求。例如,构造如下URL:<a href="https://bank.com/transfer?amount=1000&to=attacker">点击查看精彩内容</a>
当用户登录银行系统后点击该链接,浏览器自动携带Cookie完成转账操作。此攻击依赖于服务端使用GET请求处理敏感操作,违反了安全设计原则。
隐藏表单自动提交
更隐蔽的方式是使用JavaScript自动提交POST请求:<form id="csrf-form" action="https://api.example.com/delete" method="POST">
<input type="hidden" name="confirm" value="true" />
</form>
<script>document.getElementById('csrf-form').submit();</script>
该代码在页面加载时静默提交删除请求。由于同源策略不阻止请求发送(仅限制响应读取),只要目标接口缺乏CSRF令牌校验,攻击即告成功。
- GET请求用于资源获取,不应改变服务器状态
- 敏感操作必须使用POST/PUT/DELETE等非幂等方法
- 所有关键接口应验证Anti-CSRF Token
2.3 同源策略与浏览器安全模型的局限性
同源策略(Same-Origin Policy)是浏览器核心安全机制之一,限制了不同源之间的文档或脚本如何交互,防止恶意文档窃取数据。然而,该策略在现代Web应用中逐渐显现出其局限性。跨域资源共享的挑战
尽管CORS(Cross-Origin Resource Sharing)通过HTTP头部放宽了同源限制,但配置不当可能导致安全漏洞。例如:Access-Control-Allow-Origin: *
Access-Control-Allow-Credentials: true
上述响应头存在矛盾:当携带凭据(如Cookie)时,*通配符不被允许,浏览器将拒绝响应。应明确指定可信源。
常见绕过手段
- JSONP回调注入:利用
4629

被折叠的 条评论
为什么被折叠?



