在没有XSS防御的情况下,CSRF防御仍然可以提供一定的安全保护,尽管可能无法完全避免攻击。以下是一些解决方法和代码示例:
示例代码:
服务器端验证代码(假设使用Node.js):
app.post('/delete', (req, res) => {
const csrfToken = req.body.csrf_token;
// 验证令牌的有效性
if (csrfToken === req.session.csrf_token) {
// 执行删除操作
// ...
} else {
// 令牌无效,拒绝请求
// ...
}
});
示例代码(使用Express.js设置SameSite属性):
app.use((req, res, next) => {
res.cookie('session', 'session_value', {
sameSite: 'lax',
// 其他Cookie属性
});
next();
});
示例代码:
app.post('/delete', (req, res) => {
const referer = req.headers.referer;
// 检查Referer是否来自预期的域名
if (referer && referer.startsWith('http://example.com')) {
// 执行删除操作
// ...
} else {
// Referer无效,拒绝请求
// ...
}
});
尽管以上方法可以提供一定的保护,但仍然建议同时实施XSS防御措施,以提高应用程序的整体安全性。