【精选优质专栏推荐】
- 《AI 技术前沿》 —— 紧跟 AI 最新趋势与应用
- 《网络安全新手快速入门(附漏洞挖掘案例)》 —— 零基础安全入门必看
- 《BurpSuite 入门教程(附实战图文)》 —— 渗透测试必备工具详解
- 《网安渗透工具使用教程(全)》 —— 一站式工具手册
- 《CTF 新手入门实战教程》 —— 从题目讲解到实战技巧
- 《前后端项目开发(新手必知必会)》 —— 实战驱动快速上手
每个专栏均配有案例与图文讲解,循序渐进,适合新手与进阶学习者,欢迎订阅。
文章目录

前言
在 DevOps 主导的现代开发流程中,硬编码敏感信息已成为企业安全的重大隐患。据统计,平均每 1000 行代码就可能隐藏 3-5 个密钥、令牌或密码,而 GitHub 上每分钟就有超过 28 起凭证泄露事件发生。这些泄露的敏感信息可能被攻击者利用,导致云资源被盗用、数据库入侵等严重安全事件。
GitLeaks 作为一款专注于代码仓库敏感信息检测的开源 SAST 工具,能够高效扫描 Git 仓库历史提交与当前代码中的硬编码凭证,为开发团队构建第一道安全防线。
本文将从工具介绍、安装配置到实际应用,提供一套完整的 GitLeaks 使用指南,帮助团队快速集成敏感信息检测能力。

GitLeaks 介绍
GitLeaks 是一款基于 Go 语言开发的轻量级敏感信息检测工具,专注于识别 Git 仓库中硬编码的各类敏感信息,包括 API 密钥、云服务凭证、加密密钥、令牌等。
与传统的字符串匹配工具不同,GitLeaks 采用正则表达式匹配、信息熵分析与关键词上下文识别三重检测机制,能够精准识别各类复杂格式的敏感信息,同时有效降低误报率。
该工具支持本地仓库扫描、远程仓库检测、历史提交记录审计等多种场景,并且可以无缝集成到 CI/CD 流水线、Git Hooks 等开发流程中,实现 “左移安全” 理念。
作为开源工具,GitLeaks 遵循 MIT 许可证,目前已支持 80 + 主流服务的预定义检测规则,涵盖 AWS、Azure、GCP 等云平台,GitHub、Slack 等第三方服务,以及 SSH 私钥、JWT 令牌等通用敏感信息类型。其最新版本(v8.16+)进一步优化了扫描性能,支持多线程并发检测,并提供 JSON、SARIF、CSV 等多种报告格式,方便与安全分析工具集成。
项目特点
GitLeaks 的核心优势在于其全面性、易用性与高扩展性的平衡设计。首先,该工具具备强大的检测能力,通过正则表达式匹配识别特定格式的敏感信息,结合信息熵分析(通常设置 3.5-5.0 阈值)检测高随机性字符串,并利用关键词上下文过滤进一步提升准确性。这种三重检测机制使得 GitLeaks 既能识别已知格式的凭证,也能发现自定义的高熵敏感信息,检测覆盖率远超单一匹配工具。
其次,GitLeaks 提供了丰富的预定义规则集,覆盖主流云服务、API 服务与加密场景,用户无需从零配置即可快速启用检测。同时,工具支持通过 TOML 格式文件自定义检测规则,允许开发者根据业务需求扩展检测范围,例如添加内部系统的密钥格式规则。这种灵活的规则体系使得 GitLeaks 能够适应不同行业、不同规模团队的安全需求。
在集成能力方面,GitLeaks 表现突出。它支持 Windows、macOS、Linux 等全平台运行,提供 Docker 镜像、二进制包、源码编译等多种安装方式,同时可作为 GitHub Action、GitLab CI 等 CI/CD 工具的流水线步骤,也能集成到 Pre-commit 钩子中实现提交前检测。这种深度集成能力使得敏感信息检测能够自动化融入开发流程,无需开发者额外操作。
此外,GitLeaks 还具备低误报率与高性能的特点。通过允许列表(Allowlist)机制,用户可以配置路径过滤、正则排除、关键词忽略等规则,精准排除测试数据、示例凭证等非敏感信息。而基于 Go 语言的并发设计与高效的 Git 操作库,使得 GitLeaks 能够快速扫描大型仓库,即使是包含数千次提交的项目也能在短时间内完成检测。
安装说明
GitLeaks 提供多种安装方式,适配不同操作系统与使用场景,以下是详细的安装步骤。
项目地址:
https://github.com/gitleaks/gitleaks

macOS 系统安装
macOS 用户可通过 Homebrew 包管理器快速安装,这是最推荐的安装方式。打开终端并执行以下命令:
brew install gitleaks
安装完成后,执行gitleaks --version验证安装结果,若输出版本号(如 v8.16.1)则说明安装成功。
若需要安装特定版本,可指定版本号:
brew install gitleaks@8.16.1
Windows 系统安装
Windows 系统推荐通过 Chocolatey 包管理器安装,需先以管理员身份运行 PowerShell。首先安装 Chocolatey:
Set-ExecutionPolicy Bypass -Scope Process -Force
[System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072
iex ((New-Object System.Net.WebClient).DownloadString('https://community.chocolatey.org/install.ps1'))
安装完成后验证 Chocolatey:choco -v,随后安装 GitLeaks:
choco install gitleaks
同样使用gitleaks --version验证安装,若遇到权限问题,需确保 PowerShell 以管理员身份运行。
Linux 系统安装
Linux 系统支持多种安装方式,Debian/Ubuntu 用户可使用 apt:
sudo apt update && sudo apt install gitleaks
CentOS/RHEL 用户可通过 yum:
sudo yum install gitleaks
SUSE 用户可通过 Package Hub 安装(适用于 SUSE Linux Enterprise 15 SP6):
sudo zypper addrepo https://download.opensuse.org/repositories/home:zawertun/SLE_15_SP6/home:zawertun.repo
sudo zypper install gitleaks
对于其他 Linux 发行版,可直接下载二进制包:
wget https://github.com/gitleaks/gitleaks/releases/latest/download/gitleaks-linux-amd64
chmod +x gitleaks-linux-amd64
sudo mv gitleaks-linux-amd64 /usr/local/bin/gitleaks
Docker 容器安装
使用 Docker 可以避免系统环境依赖,适合临时扫描或 CI/CD 集成。首先拉取官方镜像(支持 Docker Hub 与 GHCR 两个源):
# Docker Hub
docker pull zricethezav/gitleaks:latest
# 或GHCR
docker pull ghcr.io/gitleaks/gitleaks:latest
验证镜像:docker run --rm zricethezav/gitleaks:latest --version,运行时需挂载待扫描目录:
docker run --rm -v /本地目录路径:/path zricethezav/gitleaks:latest detect --source /path
源码编译安装
若需要自定义功能或安装最新开发版本,可通过源码编译。首先确保已安装 Go 1.18 + 环境,然后执行:
git clone https://github.com/gitleaks/gitleaks.git
cd gitleaks
make build
sudo mv gitleaks /usr/local/bin/
编译完成后验证:gitleaks --version。
CI/CD 与 Git Hooks 集成安装
GitLeaks 可集成到开发流程中实现自动化检测。GitHub Action 集成需在仓库中创建.github/workflows/gitleaks.yml:
name: Gitleaks Scan
on: [push, pull_request, workflow_dispatch]
jobs:
scan:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
with:
fetch-depth: 0 # 拉取完整提交历史
- uses: gitleaks/gitleaks-action@v2
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
# 组织账户需配置许可证密钥
GITLEAKS_LICENSE: ${{ secrets.GITLEAKS_LICENSE }}
Pre-commit 钩子集成需先安装 pre-commit,然后在仓库根目录创建.pre-commit-config.yaml:
repos:
- repo: https://github.com/gitleaks/gitleaks
rev: v8.16.1
hooks:
- id: gitleaks # 原生执行
# 或使用Docker镜像
# - id: gitleaks-docker
执行pre-commit install启用钩子,此后每次提交前都会自动运行 GitLeaks 扫描。
使用说明
GitLeaks 的核心命令为detect(扫描)与protect(防护),以下是详细使用指南。
基础扫描操作
本地仓库扫描是最常用场景,进入 Git 仓库根目录执行:
gitleaks detect --source . --verbose
其中–source .指定扫描当前目录,–verbose输出详细检测结果(包括泄露位置、规则 ID、熵值等)。扫描结果会显示敏感信息内容、所在文件路径、行号、提交哈希、作者信息等关键数据。
扫描远程仓库无需本地克隆,使用–url参数并可选–temp临时克隆(扫描后删除):
# 临时克隆远程仓库扫描
gitleaks detect --url https://github.com/目标仓库.git --temp
# 或指定克隆目录
gitleaks detect --url https://github.com/目标仓库.git --clone-path /tmp/repos
若远程仓库需要认证,可添加–token参数传入访问令牌:
gitleaks detect --url https://github.com/私有仓库.git --token 你的GitHub令牌

报告输出与格式
GitLeaks 支持多种报告格式,满足不同分析需求。输出 JSON 格式报告:
gitleaks detect --source . --report-path gitleaks-report.json --format json
输出 SARIF 格式(适配 GitHub 代码扫描):
gitleaks detect --source . --report-path gitleaks-report.sarif --format sarif
输出 CSV 格式(便于 Excel 分析):
gitleaks detect --source . --report-path gitleaks-report.csv --format csv
若只需判断是否存在泄露(用于 CI/CD 流水线),可利用退出码:退出码 0 表示无泄露,2 表示发现泄露,1 表示执行失败。
忽略规则与允许列表配置
为降低误报率,GitLeaks 支持配置允许列表。创建.gitleaks.toml文件定义全局允许规则:
[allowlist]
description = "全局允许列表"
# 排除特定文件路径
paths = [
'''gitleaks\.toml''', # 排除自身配置文件
'''(?i)\.(png|jpg|gif)$''', # 排除图片文件
'''test/''' # 排除测试目录
]
# 排除特定正则模式
regexes = [
'''^\${(A-Z_)+}$''', # 排除环境变量占位符(如${SECRET_KEY})
'''^dummy_''' # 排除测试密钥(如dummy_api_key)
]
# 排除特定关键词
stopwords = [
"00000000-0000-0000-0000-000000000000" # 排除示例UUID
]
也可在规则级别配置允许列表,例如排除特定 AWS 测试密钥:
[[rules]]
id = "aws-access-token"
description = "AWS访问密钥检测"
regex = '''\b((?:A3T(A-Z0-9)|AKIA|ASIA|ABIA|ACCA)([A-Z2-7]){16})\b'''
entropy = 3.0
keywords = ["a3t", "akia", "asia", "abia", "acca"]
[[rules.allowlists]]
description = "允许AWS测试密钥"
regexes = ['''AKIAEXAMPLE123456789''']
配置完成后,扫描时指定配置文件:
gitleaks detect --source . --config .gitleaks.toml
自定义检测规则
GitLeaks 支持通过 TOML 文件扩展检测规则,满足业务特定需求。规则的核心结构包括 ID、描述、正则表达式、熵值阈值、关键词等属性。以下是检测自定义 API 密钥的示例规则:
[[rules]]
id = "custom-api-key"
description = "自定义系统API密钥检测"
# 匹配以sk_开头的32位字符串
regex = '''\bsk_[a-zA-Z0-9]{32}\b'''
entropy = 4.0 # 熵值阈值,高于此值才判定为敏感信息
keywords = ["api_key", "secret", "token", "auth"] # 上下文关键词
path = '''(?i)\.(js|ts|py|java|go)$''' # 仅扫描特定后缀文件
severity = "high" # 风险等级:low/medium/high/critical
# 规则级允许列表
[[rules.allowlists]]
description = "排除测试环境密钥"
regexes = ['''sk_test_'''] # 排除以sk_test_开头的测试密钥
正则表达式支持 Rust 语法,可使用 Regex101 工具(选择 Rust 引擎)调试规则。熵值阈值建议设置在 3.5-5.0 之间,API 密钥等高随机性字符串通常熵值较高。
高级使用场景
扫描特定提交范围可使用–since参数,例如扫描近 30 天的提交:
gitleaks detect --source . --since 30d
扫描特定分支:
gitleaks detect --source . --branch main
批量扫描多个仓库(适用于组织级检测):
# 扫描GitHub组织所有仓库
gitleaks detect --org 组织名称 --token GitHub令牌 --temp
实时防护模式(监控文件变更):
gitleaks protect --source . --verbose --staged
该模式会监控工作区文件变更,在提交前检测未暂存或已暂存的敏感信息。
总结
GitLeaks 作为一款轻量级、高扩展性的敏感信息检测工具,凭借其三重检测机制、丰富的规则库与灵活的集成能力,已成为开发团队保障代码安全的重要工具。无论是独立开发者的个人项目,还是大型企业的复杂系统,GitLeaks 都能通过简单配置实现敏感信息的自动化检测,有效防范硬编码凭证泄露风险。
在实际应用中,建议团队将 GitLeaks 集成到 CI/CD 流水线与 Git Hooks 中,实现 “提交前检测 + 构建时扫描” 的双重防护,并根据业务需求定制检测规则与允许列表,平衡检测效果与误报率。同时,结合敏感信息管理最佳实践,如使用环境变量、密钥管理服务存储凭证,从源头减少硬编码场景,才能构建更全面的安全防线。
2395





