1. XSS与CSRF攻防全景解析
在Web安全领域,XSS(跨站脚本攻击)和CSRF(跨站请求伪造)就像一对"孪生恶魔",长期占据OWASP Top 10榜单。最近在攻防演练中频繁出现的Pikachu靶场案例和DVWA漏洞平台,再次证明了这两种攻击的普遍性和危害性。本文将结合SpringBoot防御方案和DOM型XSS等新型攻击手法,带你建立完整的攻防知识体系。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. XSS攻击深度解剖
2.1 三种XSS类型对比实战
反射型XSS常见于URL参数直接输出到页面的场景,比如攻防世界GFSJ1297题目中,搜索关键词未经处理就渲染到HTML。存储型XSS更危险,像DVWA平台的留言板功能,恶意脚本会被永久保存。而DOM型XSS不需要服务器参与,前端JavaScript的innerHTML操作就可能触发,比如通过修改location.hash注入payload。
关键区别:反射型依赖URL参数,存储型需要数据库存储,DOM型完全在浏览器端完成
2.2 最新XSS攻击向量分析
现代Web应用催生了新型攻击方式:
- JSONP回调参数注入:
callback=<script>alert(1)</script> - SVG文件上传:
<svg onload=alert(1)> - AngularJS模板注入:
{{constructor.constructor('alert(1)')()}} - PDF文档XSS:通过嵌入JavaScript或表单字段触发
2.3 防御方案全景图
- 输入过滤:使用OWASP ESAPI或自定义规则过滤
<script>等标签 - 输出编码:
- HTML实体化:
<→< - JavaScript编码:
'→\x27 - CSS编码:
expression()→\65xpression()
- HTML实体化:
- CSP策略示例:
http复制Content-Security-Policy:
default-src 'self';
script-src 'nonce-EDNnf03nceIOfn39fn3e9h3sdfa';
style-src 'self' https://cdn.example.com;
img-src *;
media-src 'none';
object-src 'none'
3. CSRF攻击机制解密
3.1 攻击原理可视化
典型CSRF攻击流程:
- 用户登录银行网站,会话cookie有效
- 恶意页面包含转账表单:
html复制<form action="https://bank.com/transfer" method="POST">
<input type="hidden" name="to" value="hacker">
<input type="hidden" name="amount" value="10000">
</form>
<script>document.forms[0].submit()</script>
- 用户访问该页面时,自动发起转账请求
3.2 绕过防御的进阶技巧
- 通过XSS先获取同源权限
- 使用Flash+307重定向绕过Referer检查
- 利用JSONP接口进行GET请求伪造
- 通过DNS重绑定攻击绕过同源策略
4. 综合防御体系构建
4.1 SpringBoot安全配置模板
java复制@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.csrf()
.csrfTokenRepository(CookieCsrfTokenRepository.withHttpOnlyFalse())
.and()
.headers()
.contentSecurityPolicy("script-src 'self'")
.and()
.xssProtection()
.block(true);
}
}
4.2 前端防御最佳实践
- 敏感操作二次验证(短信/邮箱验证码)
- 关键表单添加时间戳指纹:
javascript复制const token = CryptoJS.MD5(
window.navigator.userAgent +
Math.floor(Date.now()/600000)
).toString();
5. 靶场实战记录
5.1 Pikachu CSRF通关实录
- 分析修改密码表单请求:
code复制POST /pikachu/vul/csrf/csrfchange.php
passwd=123456&confirm=123456
- 构造恶意页面托管在攻击者服务器
- 诱导管理员访问后密码被修改
5.2 DVWA XSS挑战技巧
- 绕过基础过滤:
<ScRiPt>alert(1)</sCriPt> - 事件处理器利用:
<img src=x onerror=alert(1)> - 编码混淆:
<a href="javascript:\u0061lert(1)">click</a>
6. 企业级防护方案
6.1 WAF规则配置要点
nginx复制location / {
# XSS防护
set $xss_check "";
if ($request_uri ~* "(<|%3C).*script.*(>|%3E)") {
set $xss_check "1";
}
if ($xss_check = "1") {
return 403;
}
# CSRF防护
add_header X-Frame-Options SAMEORIGIN;
add_header X-Content-Type-Options nosniff;
}
6.2 安全开发生命周期
- 需求阶段:威胁建模确定风险点
- 开发阶段:使用ESAPI等安全库
- 测试阶段:
- 使用ZAP进行自动化扫描
- 人工渗透测试覆盖边界情况
- 运维阶段:
- 实时监控异常请求
- 定期更新WAF规则库
在最近一次金融行业攻防演练中,我们通过组合XSS+CSRF攻击,成功实现了从客服系统到核心交易系统的横向渗透。这再次验证了:安全防御必须建立纵深体系,任何单一防护措施都可能被绕过。建议每季度至少进行一次完整的漏洞扫描和渗透测试,特别要关注第三方组件引入的风险。
