惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

G
Google Developers Blog
Google DeepMind News
Google DeepMind News
Hugging Face - Blog
Hugging Face - Blog
D
Docker
F
Fortinet All Blogs
博客园 - 三生石上(FineUI控件)
Project Zero
Project Zero
Engineering at Meta
Engineering at Meta
J
Java Code Geeks
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
Simon Willison's Weblog
Simon Willison's Weblog
S
Security Affairs
NISL@THU
NISL@THU
T
Tor Project blog
A
About on SuperTechFans
宝玉的分享
宝玉的分享
腾讯CDC
S
Schneier on Security
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
P
Privacy & Cybersecurity Law Blog
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
Stack Overflow Blog
Stack Overflow Blog
P
Privacy International News Feed
雷峰网
雷峰网
C
Cyber Attacks, Cyber Crime and Cyber Security
Vercel News
Vercel News
Cisco Talos Blog
Cisco Talos Blog
D
DataBreaches.Net
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
Google Online Security Blog
Google Online Security Blog
Recorded Future
Recorded Future
L
LINUX DO - 热门话题
Microsoft Security Blog
Microsoft Security Blog
Latest news
Latest news
C
Check Point Blog
有赞技术团队
有赞技术团队
T
The Exploit Database - CXSecurity.com
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
云风的 BLOG
云风的 BLOG
SecWiki News
SecWiki News
Application and Cybersecurity Blog
Application and Cybersecurity Blog
爱范儿
爱范儿
月光博客
月光博客
V
Vulnerabilities – Threatpost
T
Threat Research - Cisco Blogs
P
Palo Alto Networks Blog
T
The Blog of Author Tim Ferriss
C
Cisco Blogs
Webroot Blog
Webroot Blog
S
Security @ Cisco Blogs

WSH

2026年,大概将会是最后一个人口保持在14亿以上的年份 感谢之人 数字经济中的注意力交易 突然的噩耗 一株洋瓜藤 再见到姑妈 港澳掠影 Miniflux 中文搜索能力增强 慢慢吹~~~轻轻送~~~ 房子梦 探索云南-大理 证书过期导致的错误 过年被追问工资 在秋天开始 水里的鱼 斩断联系1 云南壮族婚恋 我有一颗乳牙 世界的底色是争,抢,偷 无题4 无题3 人来人往 AI见闻 无题2 滇池掠影 WebGIS 三维空间分析之参考超图实现的天际线分析 我原来是个同步单线程 往事如烟1 净月潭之行 一万次悲伤 开源丑闻的碎碎念 提高开发幸福感所做的举措之构建前端基础设施 浏览器标签页进程引发的性能问题 山的那边 想回到过去去去去去去去去去去去去~ WebGIS开发之glsl支持 WebGIS三维空间分析之坡度计算 WebGIS 三维分析之阴影率分析 幸福(或我的女儿叫波兰) 最后一课 Markdown解析高亮及Mermaid 上海掠影 Cesium/QGIS加载图新地球LRC自定义图层 端午粽子 如何清晰地写作 清明扫墓 自编写,自用的开源工具 饮食 AI在GIS领域的实践之QGIS-MCP 燕南飞 WebGIS 三维空间分析之剖面线分析 WebGIS三维开发中的面积量测 WebGIS空间分析之坡向分析的实现 收藏自由-新的书签工具 月夜杂谈 花海,指弹版 三维之Cesium分屏显示 请验证您是真人 GIS数据转换——从点到栅格 自定义「ONE · 一个」订阅源 西湖美人峰徒步 给开源RSS服务应用Miniflux添加「标题翻译」 五一青山湖骑行 将chatGPT集成到微信机器人 动手更换旧手机——google pixel3的电池 Vue组件检测无效属性 ArcGIS复杂插件处理 两件关于博客网站变更的事情 Vue开发个人守则 账户注销后遗症 《纳瓦尔宝典 财富与幸福》前两章的一些摘录 听一首黄歌—Yellow 坏事总是成双 出差消小记 cesium-控高分析 当你孤单你会想起谁 穿越城市-青山湖 Harry Browne关于个人金融安全17条黄金守则—财富之道 批量裁剪矢量数据的几种途径 小而美的软件 想回到过去 热!热!热! 那么近,又那么远——遥望 为什么win笔记本触摸板没有mac好用呢 一只猫 二月份的检讨 自定义Cesium缩放控件 线段简化的几种算法 今天看球了吗? HDF转为GeoTIFF QGIS插件编写 乐高风格地图 基于Python的遥感可视化记录 使用Python提取遥感影像中的土壤线 接触pandas QQ音乐评论可视化 拆分-应用-联合 阳光打在我身上 淘宝商品信息可视化
防止代码仓库敏感信息泄露
WSH · 2026-06-11 · via WSH

目录

  • 写在前面
  • 代码提交
  • 合并 PR 以及 CI/CD

写在前面

基于 Vite + Vue3 的前端项目,在路由配置里使用glob,按照/src/views/**/*.{vue,tsx} 的规则批量导入页面组件。由于组内成员在开发阶段于/src/views目录下编写测试页面,硬编码了开发用的第三方系统密钥,打包构建没有及时排除,导致系统上线之后被检测出密钥泄露,算是个安全事故。

以往组内人员提交代码时还能人工进行审查,引入AI工具之后,每天生成的代码量巨大,审查已力不从心。

需要做一些工程手段,将密钥泄露的发生阻挡在代码提交之前。目前已有成熟工具用来检测Git仓库敏感信息泄露,如 Gitleaks 和同一作者的 Betterleaks,后者为前者的续作。

经过实际测试,Betterleaks 相比 Gitleaks 速度更快,误报更少,支持更多特性,另外作者表示今后将开发重心全面转向前者,后者仅维护和发布安全相关的更新。所以新项目,使用 Betterleaks 更为适合,不过由于遗留原因,我这里仍然使用 Gitleask,它们两个的命令是高度兼容的,可以直接替换。

理想的处理流程为 pre-commit --> [PR] --> CI/CD,其中PR阶段可选。我觉得在提交前已经做了检测,合并时再做一遍有点多余,不过也不排除会出现越过检查强制提交的情况。

我主要负责前端相关事项,所以主要聚焦在前端项目如何执行上述流程。

代码提交

pre-commit钩子,它在Git提交前执行,失败时返回非零码会终止提交,完美契合此应用场景。

前端项目可以使用 Husky 来运行 pre-commit,它是一个npm包,跨平台,支持GUI和命令行,以及完备的13种钩子。

安装

pnpm add --save-dev husky

执行初始化命令之后,根目录会出现一个.husky目录

pnpm exec husky init

image.png

pre-commit为钩子文件,后续会在该文件内写入检测逻辑,文件会被提交到Git里和源代码一块做版本控制。

”-“ 目录为Husk内部文件,不用管。

同时Husky会往”packge.json“文件的scripts对象里新增一个prepare字段,作为npm的一个生命周期钩子,执行”pnpm install"命令安装依赖后,会自动执行该钩子初始化Husky,确保Git钩子在团队的每个人所用的机器上自动生效。

{
  "scripts": {
    "dev": "vite --host 0.0.0.0",
    ...,
    "prepare": "husky"
  }
}

前往 Gitleaks 下载可执行的二进制文件,保存在本地计算机,将路径添加到环境变量。

在“package.json"文件里添加对应的检查Git暂存区的命令。

{
  "scripts": {
    "dev": "vite --host 0.0.0.0",
    ...,
    "prepare": "husky",
    "check:staged": "gitleaks git --staged --verbose "
  }
}

运行命令测试能否正常执行检测

pnpm run check:staged

image.png

每次新机器克隆仓库,都需要在本地重新手动安装配置一遍Gitleaks,太麻烦,考虑写个自动化脚本,执行“pnpm install"命令之后,可以和Husky一样自动化配置。

我用AI糊了一份js(install-gitleaks.mjs)脚本,实现根据操作系统下载对应二进制文件,创建gitleaks配置,更新 .gitignre 规则。

同时因为 gitleaks下载之后没有写入环境变量,所以又糊一份js脚本,执行”gitleaks git --staged --verbose“命令,并输出美观的提示。

更新”package.json"文件,在prepare钩子中,自动初始化Husky及安装Gitleaks。

{
  "scripts": {
    "dev": "vite --host 0.0.0.0",
    ...,
    "prepare": "husky && node scripts/install-gitleaks.mjs",
    "check:staged": "node scripts/run-gitleaks.mjs"
  }
}

最后在 pre-commit 文件中写入检测命令,如下:

pnpm run check:staged
if [ $? -ne 0 ]; then
  echo "Secret detected"
  exit 1
fi

除检测代码提交前的暂存区外,还应将构建后输出的产物目录—dist,检测一遍,尤其是打包流程不规范,直接在开发环境下打包的情况。代码还没commit,push呢,就先build,绕过了后续检查。

当然这些都可以借助npm钩子来实现自动化。

合并 PR 以及 CI/CD

我记得Github提供有密钥泄露检测功能,检测到会发送邮件通知,但是使用自建的Git 服务,例如Gitea,需要自行配置。

首先需要安装好 Gitea Act Runner ,最好Runner所在的服务器上安装好Gitleaks,省的执行工作流还要再重复下载。

这是一份简单工作流配置文件,创建PR时触发,会自动检测代码中是否存在密钥泄露。

# .gitea/workflows/pr-check.yaml
name: PR Check

on:
  pull_request:

jobs:
  check:
    runs-on: ubuntu

    steps:
      - uses: https://gitea.com/actions/checkout@v4
        with:
          fetch-depth: 0

      - name: Fetch base branch
        run: |
          # 确定要合并的目标分支
          git fetch origin main

      - name: Scan PR commits
        run: |
          # 找到共同提交点,只检查PR新增的提交
          BASE=$(git merge-base origin/main HEAD)
          echo "BASE=$BASE"
          git log --oneline $BASE..HEAD
          gitleaks git \
            --log-opts="$BASE..HEAD" \
            --exit-code 1

CI/CD 基本就是重复上述过程,在工作流中,构建打包之后,执行之前提到的自定义npm命令,检查输出目录dist,不再赘述。

切记,尽量流程化,标准化,自动化!!!