SuperAPI AI 工具集

security-vite

安全与审计

查看项目

更新于 10-15 14:56

技能介绍

用途

security-vite 用于审查 Vite 应用的安全审计模式,覆盖 SPA 与开发服务器安全。它适合在开发或代码审查阶段主动排查环境变量暴露、构建期密钥泄露以及 SPA 特有漏洞。

主要能力

环境变量暴露审计

核心风险是 VITE_ 前缀的“脚枪”效应:

  • VITE_* → 被打包进客户端 JavaScript → 所有人可见
  • 无前缀 → 仅在 vite.config.ts 中可用 → 对密钥安全

审计步骤:

grep -r "VITE_" . -g "*.env*"

并检查源码中 import.meta.env.VITE_* 的使用。

常见错误示例:

  • VITE_API_SECRET(应仅限服务端)
  • VITE_DATABASE_URL(禁止使用)
  • VITE_STRIPE_SECRET_KEY(只应使用可发布密钥)

环境变量文件优先级

Vite 按以下顺序加载(后者覆盖前者):

  • .env(始终加载)
  • .env.local(始终加载,被 gitignore)
  • .env.[mode](如 .env.production)
  • .env.[mode].local(如 .env.production.local,被 gitignore)

需检查 .env.local 与 .env.*.local 是否在 .gitignore 中。

envPrefix 覆盖

若配置了 envPrefix,Vite 会暴露带有这些前缀的任意变量。应将 envPrefix 视为安全敏感设置。

构建期与运行期

危险做法:在 vite.config.ts 中放置密钥。例如在 define 中注入 process.env.API_KEY,会使 API_KEY 出现在客户端代码中。

安全模式:仅对真正公开的值使用 VITE_ 前缀,密钥保留在服务端(通过后端 API 提供)。

开发服务器安全

  • 开放到网络:server.host 设为 '0.0.0.0' 或 true 会在共享网络上带来危险,需确认是否有意为之。
  • 代理配置错误:server.proxy 中缺少面向类生产环境的安全选项。

SPA 安全问题

  • 仅客户端鉴权:仅在 React Router 等路由层做“保护”只是 UI 便利,API 调用仍需服务端鉴权。
  • 打包产物中的密钥:可用 rg 扫描 dist/ 中的 sk_live、sk_test、AKIA、api_key 等模式。
  • 生产环境源码映射:build.sourcemap 为 true 会在生产环境暴露源码。

常见漏洞与严重程度

  • VITE_* 密钥:查看 .env* 与源文件,严重
  • define 中的密钥:查看 vite.config.ts,严重
  • 生产环境源码映射:查看 vite.config.ts,中
  • 开发服务器暴露:查看 vite.config.ts 的 server.host,中
  • 仅客户端鉴权:查看无 API 鉴权的路由守卫,高
  • 打包产物中的 API 密钥:查看 dist/ 目录,严重

快速审计命令

# 查找 VITE_ 密钥
grep -r "VITE_" . -g "*.env*"

# 查找 import.meta.env 使用
rg 'import\.meta\.env' . -g "*.ts" -g "*.tsx" -g "*.vue"

# 检查配置中的 define
rg 'define:' vite.config.*

# 扫描打包产物中的密钥
rg -a "(sk_live|AKIA|ghp_|api[_-]?key['\"]?\s*[:=])" dist/

# 检查源码映射
fd '\.map$' dist/

加固清单

  • 不在 VITE_* 变量中放置密钥
  • .env.local 与 .env.*.local 在 .gitignore 中
  • 生产构建中 sourcemap: false
  • server.host 不为 0.0.0.0 或 true(除非有意为之)
  • 所有敏感 API 调用经由后端(不直接从浏览器发起)
  • vite.config.ts 的 define 块中无密钥

适用场景

适用于审查或开发 Vite 项目时,主动排查密钥暴露、源码映射泄露、开发服务器暴露到网络、仅客户端鉴权等问题。

限制

资料未提供该技能的安装方式、运行环境要求、支持的 Vite 版本范围、自动化程度或与其他工具的集成方式,暂未提供。