引言
一、CSRF攻击概述
- 攻击者诱导受害者访问恶意网站。
- 恶意网站利用受害者在其他网站的登录状态,向目标网站发送请求。
- 目标网站由于信任受害者,执行了恶意请求。
CSRF攻击定义 跨站请求伪造(CSRF)是一种攻击方式,攻击者利用受害者在其他网站上的登录会话,在用户不知情的情况下,以受害者的名义执行非法操作。
CSRF攻击原理
二、Vue.js中的CSRF防护机制
- 原理:在用户登录后,服务器生成一个CSRF Token,并将其存储在用户的会话中。
- 实现:
// 生成CSRF Token const csrfToken = crypto.randomBytes(24).toString('hex'); // 存储CSRF Token到用户会话 req.session.csrfToken = csrfToken; // 将CSRF Token发送到前端页面 res.cookie('X-CSRF-TOKEN', csrfToken);
- 前端验证:
// 获取CSRF Token const csrfToken = document.cookie.split(';').find(cookie => cookie.trim().startsWith('X-CSRF-TOKEN=')).split('=')[1]; // 在发送请求时,将CSRF Token添加到请求头中 axios({ url: '/api/protected', method: 'POST', headers: { 'X-CSRF-TOKEN': csrfToken }, data: { // 请求参数 } });
- 原理:通过设置SameSite属性,可以防止浏览器在发起跨站请求时携带Cookie。
- 实现:
// 设置SameSite属性为Strict res.cookie('session', 'user_session', { sameSite: 'Strict' });
- 原理:通过验证HTTP Referer字段,可以确保请求来自受信任的域名。
- 实现:
// 验证Referer字段 const referer = req.headers.referer; if (!referer || !referer.startsWith('https://trusted-domain.com')) { return res.status(403).send('Invalid referer'); }
使用CSRF Token
使用SameSite Cookie属性
验证Referer字段