引言

一、CSRF攻击概述

    CSRF攻击定义 跨站请求伪造(CSRF)是一种攻击方式,攻击者利用受害者在其他网站上的登录会话,在用户不知情的情况下,以受害者的名义执行非法操作。

    CSRF攻击原理

    • 攻击者诱导受害者访问恶意网站。
    • 恶意网站利用受害者在其他网站的登录状态,向目标网站发送请求。
    • 目标网站由于信任受害者,执行了恶意请求。

二、Vue.js中的CSRF防护机制

    使用CSRF Token

    • 原理:在用户登录后,服务器生成一个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属性,可以防止浏览器在发起跨站请求时携带Cookie。
    • 实现
      
      // 设置SameSite属性为Strict
      res.cookie('session', 'user_session', { sameSite: 'Strict' });
      

    验证Referer字段

    • 原理:通过验证HTTP Referer字段,可以确保请求来自受信任的域名。
    • 实现
      
      // 验证Referer字段
      const referer = req.headers.referer;
      if (!referer || !referer.startsWith('https://trusted-domain.com')) {
      return res.status(403).send('Invalid referer');
      }
      

三、总结