“写笔记”支持四种格式——Word 文档、Excel 表格、Markdown、纯文本,起稿或二次编辑时都能随时切换,同一篇笔记想用哪种形态来记,都由你说了算。
md、txt、csv、json 这类纯文本则原样载入,不做多余加工。拿一张现成的表倒进来、改几笔、再导出去,等于白用一台免费的格式转换器。
要带走就在右上角点“下载”,可导出 PDF、Word、Markdown、Excel、TXT 等格式;列表卡片“⋯”菜单里,也有同样的下载入口。
在“工具”页点“+ 上传工具”即可发布:填好名称与链接,再用 Markdown 把使用方法写清楚——能解决什么问题、怎么装、怎么用,比堆介绍实在。
要分发安装包就一并上传压缩包(ZIP、RAR、7Z、TAR.GZ,最大 35MB),别人在详情页一键下载;只放链接不带附件也可以。
工具按大家的收藏热度排序,好用的自然会被顶上来。发布后可在详情页或卡片菜单里编辑、下架。
写笔记时勾上“隐藏”,这篇就只存在于你自己的账号里:不进列表、不进搜索、不上首页精选,也不会出现在任何公开的页面,链接发给别人同样打不开。
适合放密码、草稿、日记这类只给自己看的内容;想公开,去“发布”打开它,把“隐藏”的勾去掉再保存,之后编辑会默认保持原状态,不会悄悄变回公开。
你的内容会同时保存在多个副本上,系统定期做备份与完整性校验,再配合异地容灾机制:就算某台机器出问题,数据也不会丢,可以长期放心存放;特别重要的资料,仍建议你另外再留一份备份。
全站跑在容器化、模块化的现代架构上,更新、部署、回滚都很快,扩展性和稳定性都按长期运营的标准来设计(Built for reliability, designed to scale)。
这个网站最早只是一个人的笔记仓库,后来慢慢长成现在的知识中枢。设计上很克制——没有广告、没有追踪、没有推荐算法,只是干干净净地存放一些东西;既然做好了,就公开出来,万一有人用得上呢。
不做大而全,不做平台梦,保持简单、保持克制、保持好奇。所有内容都由用户贡献、由用户维护:不会突然冒出付费墙,不会在角落塞广告位,也不会把你的数据卖给第三方。
产品会持续迭代,站内日志页记录着每一次改动,改了什么都有迹可循;想了解这个站是怎么一步步走到今天的,翻翻日志就能看到来龙去脉。
如果在这里看到涉嫌违规的内容,点对应卡片右侧的“举报”按钮就能提交,我们会尽快核实处理;也谢谢你花一点时间,一起把这里维护干净。
以为 gitleaks 够用?6 个开源 secret scanning 工具横评(2026)
上周我帮朋友做 secret scanning 的选型,他们 CI pipeline 里挂的是 git-secrets。我第一反应是:这玩意 AWS 官方维护、12k+ stars,不至于换吧。
结果跑了两周就翻车了。
一个实习生把 Stripe 的 test key(sk_test_ 开头,本身不敏感,但格式和真 key 一模一样)推进了 main 分支,git-secrets 没拦下来。事后排查发现,git-secrets 默认规则只认 AWS 的 key 模式,Stripe 的 key 它根本不认识。这洞要是换个 sk_live_ 开头的真 key,团队这周就得开会复盘了。
这事让我回头认真把 2026 年还在活跃的 6 个开源 secret scanning 工具摸了一遍。结论是:stars 多不等于不漏 key,stars 多只是说明这个项目进过大众视野,不代表它当前能覆盖你需要的检测面。下面把对照过程拆开讲,给同样在选型的老哥一个参考。
前言:2026 年的 secret scanning 生态
2026 年的 secret scanning 工具生态有两个值得注意的变化。
第一个是 trufflehog 的 live verification 模式从实验特性变成了默认推荐路径。它扫到 key 之后会真的去调对应厂商的 API 验证这个 key 是不是活的,这个功能直接改变了 secret scanning 的误报模型。以前你扫出来一堆疑似 key,得人工一个个试;现在工具帮你试好了,告诉你“这个 key 是活的,可以立刻 revoke”。
第二个是 gitleaks 在 v8 之后把检测引擎从纯正则升级到了正则+熵+allowlist 的组合,规则生态也有了专门的 gitleaks-rules 仓库在做社区贡献。这意味着 gitleaks 不再只是“正则匹配器”,它开始具备一定的语义理解能力。
反面是 detect-secrets 维护放缓的趋势没有逆转,git-secrets 基本停在 AWS 时代没动过。社区里有人在讨论把 detect-secrets 的插件机制 fork 出来继续维护,但还没有形成稳定的新主线。
本文用四维基础筛选(license、平台兼容、能力重叠、成熟度)加五个 secret scanning 特化维度(检测方法、准确率、CI/pre-commit 集成、git history 扫描、速度)对以下工具做横评:
- gitleaks
- trufflehog
- detect-secrets
- git-secrets
- Semgrep Secrets
- GitGuardian ggshield
需要先说清楚:本文是工具评测,不是 CVE 复盘,没有 PoC 段和补丁 diff 段。所有性能和准确率数据来自公开仓库、release notes、第三方基准(puaro.io 的 2.2M 行代码 benchmark、devsecops.ae 2026 横评)。涉及 stars 和版本号的,以 GitHub 2026-07 检索结果为准。
方法论:我怎么评的
基础评估维度
跟通用工具评测一样,license 和平台兼容性是硬门槛。secret scanning 这个领域有一个额外的维度值得单独看:检测引擎的成熟度。一个工具是纯正则、正则+熵、还是有完整的 detector 插件机制,直接决定了它能不能跟上新的 key 格式。
举个例子:2025 年 OpenAI 更新了 API key 格式,从 sk- 开头变成了 sk-proj- 开头。纯正则工具如果不更新规则,新格式的 key 就漏了。而有插件机制的工具,社区可以在几天内提交新 detector。
特化评估维度(五个)
检测方法 —— 正则、熵、ML、live verification,每种都有 trade-off
- 正则:快但死板,遇到新格式就漏
- 熵:能发现未知格式的 secret,但误报高(高熵字符串不一定是 key)
- ML:需要训练数据,对已知模式准,对罕见模式可能过拟合
- live verification:最准,但要发外部请求,慢且有合规风险
准确率 —— 误报率(false positive)和漏报率(false negative)都要看。很多横评只报其中一个,比如只说自己“漏报率低于 1%”,但不说误报率是 30%。这没意义,因为高误报率的工具团队根本不会用——天天报假警,大家就 ignore 了。
CI / pre-commit 集成 —— 能不能在 commit 落地前拦下来。这是 secret scanning 最有价值的拦截点。如果在代码已经 push 到 remote 之后才扫到,已经晚了——你可能要处理一个已经暴露的 secret。
git history 扫描 —— 能不能扫历史 commit。老项目补救时关键。很多团队在引入 secret scanning 时,仓库里已经堆积了几百个 commit,里面可能就有暴露的 key。这时候需要工具能回溯扫描整个 git history。
速度 —— CI 里跑的速度。慢的工具会被团队关掉。我见过真实案例:某个团队挂了 trufflehog 全量扫描,每次 CI 跑 40 分钟,开发等得不耐烦,最后在 PR 里偷偷把扫描步骤注释掉了。
横评速览表
| 工具 | 维护方 | License | 检测方法 | live verification | pre-commit | git history | 速度 | 活跃度 |
|---|---|---|---|---|---|---|---|---|
| gitleaks | gitleaks org | MIT | 正则+熵+allowlist | 否 | 有 | 有 | 快 | 活跃 |
| trufflehog | Truffle Security | AGPL-3.0 | 800+ detector | 有 | 有 | 有 | 慢 | 活跃 |
| detect-secrets | Yelp | Apache-2.0 | 正则+熵+插件 | 否 | 有 | 需配合 | 中 | 维护放缓 |
| git-secrets | AWS | Apache-2.0 | 纯正则(AWS) | 否 | 有 | 仅 diff | 慢 | 基本不动 |
| Semgrep Secrets | Semgrep Inc | LGPL-2.1 | 规则引擎 | 否(社区版) | 有 | 有 | 中 | 活跃 |
| ggshield | GitGuardian | MPL-2.0 | ML+正则+熵 | 否(社区版) | 有 | 有 | 中 | 活跃 |
注:stars 数据以 GitHub 2026-07 检索结果为准,gitleaks 约 17k+、trufflehog 约 14k+、git-secrets 约 12k+、detect-secrets 约 3k+,量级为粗略标注。license 以仓库当前 LICENSE 文件为准。“活跃度”是定性判断,参考最近 push 时间和 release 频率。
几个一眼能看出来的点:
- trufflehog 是唯一原生支持 live verification 的
- git-secrets 是唯一只认 AWS 模式的
- detect-secrets 在所有维度上都是中规中矩,没有杀手锏也没有致命短板
- ggshield 社区版砍掉了 live verification 和 dashboard,留的是检测引擎本体
逐平台拆解
下面每个工具单独拆。先说定位,再说架构和检测引擎,末尾给适用场景。所有性能和准确率数据均来自公开基准,未做本地实测。
gitleaks:Go 单二进制,pre-commit 友好
定位
gitleaks 是 Go 写的,编译出来一个二进制,扔到 CI 里零依赖,这是它最大的工程优势。检测引擎从 v8 开始是正则+熵+allowlist 的组合,规则放在 gitleaks-rules 仓库里,社区可以贡献。
为什么我说“以为 gitleaks 够用”?
因为对绝大多数中小团队,它确实够用。pre-commit hook 配置简单:
# .pre-commit-config.yaml
repos:
- repo: https://github.com/gitleaks/gitleaks
rev: v8.21.2
hooks:
- id: gitleaks
git history 扫描也原生支持,一行命令搞定:
gitleaks detect --source . --report-path leaks.json
踩坑点
坑一:规则覆盖
gitleaks 默认规则集覆盖了 AWS、GCP、Azure、Stripe、GitHub、Slack 这类主流厂商,但对国内云厂商(阿里云、腾讯云)和细分 SaaS(Datadog、Splunk、Snowflake 的新版 key 格式)覆盖不全。
举个例子:Snowflake 在 2025 年更新了他们的 key 格式,从 32 位随机字符串变成了 64 位带校验和的格式。gitleaks 的默认规则集直到 2026 年初才更新这个新格式。中间这段时间,用旧版 gitleaks 的团队就漏了。
要补这些得自己写规则。写正则这件事看起来简单,写到不误报不漏报其实挺折腾。比如你要写一个阿里云 AccessKey 的正则:
# gitleaks 自定义规则示例
rules:
- id: aliyun-access-key-id
description: "Aliyun AccessKey ID"
regex: 'LTAI[0-9a-zA-Z]{12,20}'
keywords: ["LTAI"]
# 注意:这里的 keywords 字段是 gitleaks 的优化点
# 它会在扫描前先快速过滤包含 "LTAI" 的文件
# 避免对每个文件都跑完整正则
看起来简单,但你要考虑:
- 阿里云的 AccessKey ID 还有 RAM 用户格式
LTAI开头,但子账号的格式不同 - 有些代码里把
LTAI作为变量名的一部分,比如ltai_config,这就会误报 - 需要加 allowlist 排除测试文件、文档等
坑二:熵值检测的误报
gitleaks 的熵值检测会把高熵字符串(JWT、加密后的随机串、某些 base64 编码的二进制)标成疑似 secret。实际 CI 里跑会产生一批需要人工 review 的噪声。
# 减少视觉噪声的选项
gitleaks detect --no-banner --redact
--no-banner 去掉启动时的 logo 输出,--redact 把 secret 内容替换成 REDACTED,这样输出更干净。但本质上 entropy-based detection 的误报是这个方法论的固有代价——高熵不一定是 secret,可能只是随机生成的 ID 或者加密数据。
适用场景
- 个人开发者、小到中型团队
- CI 速度敏感
- 想零配置快速上手
trufflehog:live verification 是杀手锏也是软肋
定位
trufflehog 最大的差异化是 live verification。扫到一个疑似 Stripe key,它真的会去调 Stripe API 验证这个 key 是不是活的。这意味着它的误报率在所有工具里最低——一个 key 被标出来,要么是真的活的,要么 trufflehog 自己也不确定会标 verified: false 让你判断。
架构
trufflehog 有 800+ detector,每个 detector 对应一种服务。比如 Stripe detector 知道 Stripe key 的格式,也知道怎么调 Stripe API 验证。这个 detector 体系是插件化的,社区可以贡献新的 detector。
代价:速度
live verification 要发外部 HTTP 请求,扫一个大 repo 几百个 detector 类型,单次扫描时间可能是 gitleaks 的 5-10 倍。在 CI 里挂 trufflehog 全量扫描是不现实的,常见做法是只在 pre-push 或 nightly 跑。
# trufflehog 扫整个 git history
trufflehog git https://github.com/example/repo.git \
--json --results=verified,unknown \
--only-verified
--only-verified 这个 flag 很关键,只输出 live verification 通过的 secret,能直接拿去 incident response,不用再人工筛误报。
合规风险
但 live verification 有一个让人发毛的点:你的疑似 secret 会被发到对应厂商的 API 做验证。
举个例子:trufflehog 扫到一个疑似 GitHub token,它会真的发一个请求到 api.github.com 验证这个 token 是否有效。从技术角度看,这没问题——trufflehog 是开源的,验证逻辑可审计。但从企业合规角度,把内部疑似 key 主动发到外部 API 这件事需要安全团队签字。
有些团队因为这个点放弃 trufflehog,改成 gitleaks 加人工 review 的组合。特别是金融、政府客户,数据外发有严格的合规要求。
适用场景
- 旧项目 git history 补救(能区分真 key 和测试 key)
- 企业合规要求误报最低
- CI 能容忍慢扫描
detect-secrets(Yelp):插件化但要自己写
定位
detect-secrets 的核心卖点是插件化的 detector 机制。你可以自己写一个 detector,注册到工具里,比 gitleaks 写规则灵活。Yelp 内部用这个工具很多年,工程化沉淀是够的。
插件机制
写一个 detector 的示例:
# detect-secrets 自定义 detector 示例
from detect_secrets.core.plugins import base
class StripeKeyDetector(base.BasePlugin):
"""检测 Stripe secret key"""
secret_type = "Stripe Secret Key"
def analyze_line(self, filename, line, line_number):
# 正则匹配
if 'sk_live_' in line:
# 提取 key
key = self.extract_key(line)
if key:
return {
'type': self.secret_type,
'key': key,
'line_number': line_number
}
这个机制比 gitleaks 的 YAML 规则灵活,因为你可以写任意 Python 逻辑,不限于正则匹配。比如你可以:
- 检查 key 的校验和
- 验证 key 的格式是否符合特定版本
- 结合上下文判断(比如排除测试文件)
短板
但社区版的 detector 库比 gitleaks 的规则库薄很多,开箱即用覆盖面不如 gitleaks。要用好 detect-secrets,团队得有意愿自己写 detector,否则就是“用了但没真正用起来”。
pre-commit 集成
detect-secrets 的 pre-commit 框架配置:
# .pre-commit-config.yaml
repos:
- repo: https://github.com/Yelp/detect-secrets
rev: v1.5.0
hooks:
- id: detect-secrets
args: ['--baseline', '.secrets.baseline']
.secrets.baseline 文件用来存已知的 false positive,避免每次扫描都报同一批。这个 baseline 机制比 gitleaks 的 allowlist 更结构化,是 detect-secrets 设计上比 gitleaks 强的一个点。
踩坑点:维护放缓
detect-secrets 的 GitHub activity 从 2024 下半年开始明显下降,最近一年的 commit 频率比 gitleaks 低一个数量级。如果你押注 detect-secrets,要做好长期自己维护 detector 的准备。
适用场景
- 有静态分析团队
- 愿意自己写 detector
- 需要结构化的 baseline 管理
git-secrets(AWS):stars 多但基本不动
定位
git-secrets 是 AWS 在 2015 年左右开源的,目的是防止 AWS access key 被推进 git。stars 12k+,看起来很主流。
核心问题
但这个工具的核心问题是:它就是个 AWS key 专用的正则匹配器。默认规则集只认 AWS 的 key 格式(AKIA 开头、secret key 长度),其他厂商的 key 一概不认识。
这就是开头那个 Stripe test key 漏报的原因——这不算 bug,设计 scope 本来就那么窄。
# git-secrets 默认规则
git secrets --register-aws
git secrets --scan
要扩规则可以,但 git-secrets 的规则语法很原始,写起来比 gitleaks 的 YAML 难用得多。社区里基本没人给 git-secrets 贡献非 AWS 规则。
活跃度
git-secrets 的 GitHub 仓库最近几年几乎没有 commit,issue 区也是僵尸状态。AWS 官方没明确说要废弃,但也没有维护投入。把它当 2015 年的 AWS 专用工具看就对了,别当通用 secret scanning 方案。
适用场景
- 纯 AWS 环境、且只想拦 AWS key、且已经在用 AWS 的其他工具链
- 其他场景都不推荐
Semgrep Secrets:规则引擎选手
定位
Semgrep 本身是一个通用静态分析引擎,Semgrep Secrets 是它针对 secret scanning 的规则集和模式。优势是如果你团队已经在用 Semgrep 做 SAST,加 secret scanning 规则是零成本集成,统一一套规则语法。
规则示例
# Semgrep secret rule 示例
rules:
- id: stripe-live-secret-key
patterns:
- pattern-regex: 'sk_live_[0-9a-zA-Z]{24}'
message: "Stripe live secret key detected"
languages: [generic]
severity: ERROR
优势
Semgrep 的规则引擎比纯正则强,支持:
- pattern 组合:可以写“匹配 A 但不匹配 B”的规则
- metavariable:可以提取匹配到的值做进一步分析
- 跨文件分析:可以检查一个文件里的 key 是否在另一个文件里被引用
写复杂规则比 gitleaks 灵活。比如你要检测“Stripe key 出现在非测试文件中”:
rules:
- id: stripe-key-not-in-test
patterns:
- pattern-regex: 'sk_live_[0-9a-zA-Z]{24}'
- pattern-not: 'test_*.py'
message: "Stripe live key in non-test file"
languages: [generic]
severity: ERROR
短板
Semgrep Secrets 的开箱规则数量比 trufflehog 的 800+ detector 少,社区规则库在补充但还没到 trufflehog 那个量级。
另外注意:live verification 在 Semgrep 社区版里没有,是 Semgrep Pro(商业版)的功能。如果团队用社区版,Semgrep Secrets 的检测能力和 gitleaks 在一个量级,差异在规则灵活度。
适用场景
- 已经在用 Semgrep 做 SAST
- 有规则维护能力
- 需要跨语言统一静态分析
GitGuardian ggshield:闭源但社区版常用作对照
定位
ggshield 是 GitGuardian 的 CLI 工具,社区版免费但检测引擎是闭源的。很多团队把它当对照基准用——拿 ggshield 的结果跟 gitleaks 对比,看 gitleaks 漏了什么。
检测引擎
ggshield 的检测引擎用 ML+正则+熵的组合,据公开材料(GitGuardian 自己的 benchmark)误报率比纯正则方案低。ML 模型能识别一些正则难以描述的模式,比如“看起来像 API key 但不是标准格式”的字符串。
社区版限制
社区版砍掉了几个关键功能:
- live verification
- dashboard
- incident response workflow
- 团队协作
社区版本质上是个本地扫描器。个人开发者白嫖社区版做本地扫描够用,企业功能要付费。
# ggshield 扫描
ggshield secret scan path .
ggshield secret scan repo .
License
license 是 MPL-2.0,对内部使用没问题。但因为是闭源检测引擎,如果企业合规要求“所有安全工具必须可审计源码”,ggshield 不满足。这个限制在金融、政府客户里挺常见。
适用场景
- 作为 gitleaks 的对照基准
- 个人开发者用社区版做本地扫描
- 企业要 dashboard 时上商业版
生态与选型建议
几个观察
第一,工具分化在加速。
secret scanning 这个领域的工具分化在加速:
- gitleaks 和 trufflehog 走的是“开箱即用加社区规则”路线
- detect-secrets 和 Semgrep Secrets 走的是“规则引擎加团队自定义”路线
- git-secrets 停在 AWS 专用路线上不动了
- ggshield 走的是“闭源引擎加社区版引流”路线
没有哪个工具在所有维度上都赢,选型本质是在 trade-off 里挑最贴合你团队约束的那个。
第二,live verification 是 2026 年最有价值的技术进展。
但它带来的合规问题(疑似 key 主动发到外部 API)还没被广泛讨论。trufflehog 是目前唯一原生支持的开源工具,但企业部署前安全团队得签字。
第三,stars 数和工具实际能力的相关性很弱。
git-secrets 12k+ stars 但只能扫 AWS key,detect-secrets 3k+ stars 但插件机制设计上比 gitleaks 强。选型别只看 stars。
按团队规模推荐
个人开发者 / 小团队
gitleaks 一把搞定。
pre-commit hook 配置简单,git history 扫描原生支持,零依赖单二进制。别折腾。
# 最简单的用法
gitleaks detect --source .
中型安全团队
gitleaks 做日常 CI 扫描 + trufflehog 做 nightly 全量扫描(开 --only-verified)。
- gitleaks 快,能在每次 commit 拦下来
- trufflehog 慢但准,nightly 兜底
这样组合,白天开发效率不受影响,晚上自动化扫一遍兜底。
企业级 / 高合规
gitleaks + trufflehog(live verification 评估合规风险后决定是否开)+ GitGuardian 商业版做 dashboard 和 incident response。
这个组合成本高,但能覆盖从开发到运营的完整流程:
- 开发阶段:gitleaks pre-commit 拦截
- CI 阶段:gitleaks 快速扫描
- nightly:trufflehog 深度扫描 + live verification
- 运营阶段:GitGuardian dashboard 做告警管理和 incident response
按合规要求推荐
要求所有工具源码可审计
排除 ggshield(闭源引擎),其余 5 个都是开源。
要求疑似 secret 不外发
排除 trufflehog 的 live verification(或用 --no-verification 关掉,但那样 trufflehog 的核心价值就没了)。
要求覆盖国内云厂商 key
gitleaks 加自己写规则,或者 detect-secrets 加自己写 detector。
国内云厂商的 key 格式:
- 阿里云:AccessKey ID 以
LTAI开头,AccessKey Secret 是 30 位随机字符串 - 腾讯云:SecretId 以
AKID开头,SecretKey 是 32 位随机字符串 - 华为云:AK/SK 类似 AWS 格式
这些在主流工具的默认规则集里都没有,需要自己补充。
最后的话
选 secret scanning 工具,别只看 stars,别只看 README 里的功能列表。
回去看看你的 CI pipeline 里现在挂的是什么,跑一遍 benchmark 看看它漏了哪些 key 格式。如果发现它漏了你们正在用的服务,那这篇文章就值了。
我自己的选择是:gitleaks 做日常 + trufflehog 做兜底。你呢?