🔐 CSRF Token状态
首先获取有效的CSRF Token,这是防护的基础
✅ 合法请求测试 受保护
带有正确CSRF Token的请求应该能够成功执行
fetch('/admin-api/test/notification/api/publish-database', {
method: 'POST',
headers: {
'Authorization': 'Bearer ' + jwtToken,
'tenant-id': '1',
'X-CSRF-TOKEN': csrfToken, // 🔐 正确的CSRF Token
'Content-Type': 'application/json'
},
credentials: 'include',
body: JSON.stringify({
title: '✅ 合法请求测试',
content: '这个请求携带了正确的CSRF Token',
level: 4,
targetScope: 'SCHOOL_WIDE'
})
});
🚨 CSRF攻击模拟 已防护
恶意网站尝试在用户不知情的情况下执行操作(无CSRF Token)
// 🚨 恶意网站的JavaScript代码
fetch('/admin-api/test/notification/api/publish-database', {
method: 'POST',
headers: {
'Authorization': 'Bearer ' + stolenJwtToken,
'tenant-id': '1',
'Content-Type': 'application/json'
// ❌ 缺少CSRF Token - 攻击者无法获取
},
body: JSON.stringify({
title: '🚨 恶意通知',
content: '这是CSRF攻击尝试发布的恶意内容'
})
});
🎭 伪造Token攻击 已防护
攻击者尝试使用伪造的CSRF Token绕过防护
fetch('/admin-api/test/notification/api/publish-database', {
method: 'POST',
headers: {
'Authorization': 'Bearer ' + jwtToken,
'tenant-id': '1',
'X-CSRF-TOKEN': 'fake-token-12345', // 🎭 伪造的CSRF Token
'Content-Type': 'application/json'
},
body: JSON.stringify({
title: '🎭 伪造Token攻击',
content: '这个请求使用了伪造的CSRF Token'
})
});
📖 GET请求测试 无需验证
GET请求(读操作)不需要CSRF Token,保持RESTful API的无状态特性
fetch('/admin-api/test/notification/api/list', {
method: 'GET',
headers: {
'Authorization': 'Bearer ' + jwtToken,
'tenant-id': '1'
// ℹ️ GET请求无需CSRF Token
}
});