DEV Community 中文 关注 50 行代码构建密钥检测预提交钩子 Git 仓库中泄露的密钥是安全事件的主要原因之一,AWS 密钥常被机器人快速抓取。最有效的防御措施是预提交钩子(pre-commit hook),它在代码提交前检测密钥,从而避免复杂的提交历史清理和密钥轮换需求。传统的 CI/CD 扫描器属于被动防御,仅在密钥已存在于仓库历史中后才发现问题,留下了被利用的时间窗口。一个轻量级、可定制的 Python 预提交钩子,代码量约 50 行,提供了一种高效的本地解决方案。该钩子利用正则表达式针对常见密钥类型进行检测,包括 AWS 访问密钥、通用 API 密钥、私钥、配置文件中的密码以及特定平台的令牌。其运行时间仅为毫秒级,除 Python 标准库外无需任何外部依赖。该脚本的创建过程包括:在 .git/hooks/ 目录下创建预提交文件,赋予其可执行权限,并定义用于识别各类密钥的正则表达式模式。它仅解析暂存变更中的新增行,专门检测新泄露的密钥,而非已存在的密钥或删除操作。对于合法的误报,可通过内联的 # nosecret 注释作为逃生机制。为分发该钩子,可将其存储于已提交的目录中并通过 Makefile 配置进行复制;或更优雅地,通过 git config core.hooksPath 配置 Git 使用共享的钩子目录。这种方式可无缝将钩子集成到团队工作流中。团队可通过添加针对内部令牌格式的模式来扩展该钩子,但必须确保精确性,以避免因误报过多而削弱系统可信度。此预提交钩子可作为更广泛安全策略的补充,例如配合 CI 级别的扫描器(如 truffleHog 或 gitleaks),构成关键的第一道防线。它能防止敏感数据被意外暂存,而这是开发过程中常见的失效模式。这种低投入、高回报的安全控制措施,无需大量设置或架构变更,即可显著提升整体安全态势。 Building a Secrets Detection Pre-Commit Hook in 50 Lines dev.to DEV Community 中文 RSS thenote.app
.git/hooks/目录下创建预提交文件,赋予其可执行权限,并定义用于识别各类密钥的正则表达式模式。它仅解析暂存变更中的新增行,专门检测新泄露的密钥,而非已存在的密钥或删除操作。对于合法的误报,可通过内联的# nosecret注释作为逃生机制。为分发该钩子,可将其存储于已提交的目录中并通过 Makefile 配置进行复制;或更优雅地,通过git config core.hooksPath配置 Git 使用共享的钩子目录。这种方式可无缝将钩子集成到团队工作流中。团队可通过添加针对内部令牌格式的模式来扩展该钩子,但必须确保精确性,以避免因误报过多而削弱系统可信度。此预提交钩子可作为更广泛安全策略的补充,例如配合 CI 级别的扫描器(如 truffleHog 或 gitleaks),构成关键的第一道防线。它能防止敏感数据被意外暂存,而这是开发过程中常见的失效模式。这种低投入、高回报的安全控制措施,无需大量设置或架构变更,即可显著提升整体安全态势。