GitHub_Trending/ba/basic CSRF攻击防御:令牌验证与同源检测

GitHub_Trending/ba/basic CSRF攻击防御:令牌验证与同源检测

【免费下载链接】basic ⭐⭐⭐⭐⭐ 一款开箱即用的 Vue 中后台管理系统框架,支持多款 UI 组件库,兼容PC、移动端。vue-admin 【免费下载链接】basic 项目地址: https://gitcode.com/GitHub_Trending/ba/basic

跨站请求伪造(CSRF,Cross-Site Request Forgery)是一种常见的Web安全威胁,攻击者通过诱导用户在已认证的情况下执行非预期操作。本文将结合GitHub_Trending/ba/basic项目的实际实现,介绍如何通过令牌验证与同源检测构建有效的CSRF防御体系。

一、CSRF防御现状分析

在现代Web应用中,CSRF防御通常依赖三大机制:令牌验证、同源检测和SameSite Cookie策略。通过对项目源码的全局扫描(使用search_files工具搜索csrf|token|XSRF关键字),发现当前项目主要通过以下文件实现安全防护:

二、令牌验证机制实现

项目采用请求头令牌方案,在每个API请求中附加认证令牌。核心实现位于src/api/index.ts的请求拦截器:

api.interceptors.request.use(
  (request) => {
    const userStore = useUserStore()
    if (request.headers && userStore.isLogin) {
      request.headers.Token = userStore.token  // 附加认证令牌
    }
    return request
  },
)

令牌生命周期管理

  1. 令牌生成:用户登录时由后端签发,通过src/api/modules/user.tslogin接口获取
  2. 存储机制:使用Pinia状态管理存储令牌,源码参见src/store/modules/user.ts
  3. 自动续期:通过src/api/index.ts的响应拦截器实现令牌过期自动重试

安全增强建议

当前实现使用Token请求头传递认证信息,建议增加CSRF专用令牌字段:

// 建议修改:添加CSRF令牌
if (request.headers && userStore.isLogin) {
  request.headers.Token = userStore.token;
  request.headers['X-CSRF-Token'] = userStore.csrfToken;  // 添加专用CSRF令牌
}

三、同源检测策略

项目通过Vite的开发服务器配置实现跨域请求控制,vite.config.ts中的代理设置:

server: {
  proxy: {
    '/proxy': {
      target: env.VITE_APP_API_BASEURL,
      changeOrigin: command === 'serve' && env.VITE_OPEN_PROXY === 'true',  // 跨域时修改Origin
      rewrite: path => path.replace(/\/proxy/, ''),
    },
  },
}

关键配置解析

  • changeOrigin: true:当启用代理时,会将请求的Origin头修改为目标服务器域名
  • 严格路径匹配:仅对/proxy前缀的请求进行代理,限制跨域范围
  • 环境隔离:通过VITE_OPEN_PROXY环境变量控制生产/开发环境的跨域策略

前端同源检测实现

src/utils/ua.ts中可添加Origin验证工具函数:

// 建议添加:验证请求来源合法性
export function validateOrigin(origin: string): boolean {
  const allowedOrigins = ['https://yourdomain.com', 'https://admin.yourdomain.com'];
  return allowedOrigins.includes(origin) || origin.endsWith('.yourdomain.com');
}

四、可视化安全架构

登录流程

图:用户认证流程与令牌分发示意图,图片来源src/assets/images/login-banner.png

CSRF防御流程图

mermaid

五、生产环境安全加固

推荐配置清单

  1. Cookie安全属性:在src/utils/cookie.ts中设置

    // 建议添加
    document.cookie = `csrfToken=${token}; SameSite=Strict; Secure; HttpOnly`;
    
  2. 请求来源验证:在src/api/index.ts添加Origin检查

    const allowedOrigins = ['https://yourdomain.com'];
    if (!allowedOrigins.includes(request.headers.origin)) {
      return Promise.reject(new Error('非法请求来源'));
    }
    
  3. 安全审计日志:通过src/utils/log.ts记录可疑请求

六、参考资源

通过以上多层防御机制,GitHub_Trending/ba/basic项目能够有效抵御CSRF攻击。建议定期使用src/utils/security.ts中的安全检测工具进行自检,确保防御措施持续有效。

【免费下载链接】basic ⭐⭐⭐⭐⭐ 一款开箱即用的 Vue 中后台管理系统框架,支持多款 UI 组件库,兼容PC、移动端。vue-admin 【免费下载链接】basic 项目地址: https://gitcode.com/GitHub_Trending/ba/basic

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值