[安全]Git用户端敏感信息检查方案

Git仓库利用pre-commit在用户端检测敏感信息

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录


前言

Git作为代码管理工具,已经被广泛使用。在实际工作中,大部分开发人员都会将代码push到远程代码管理平台,实现协同开发,比如github、gitlab等。用户在代码中经常会使用到用户名/密码、ssh key、token、云access key等敏感信息。这些信息一旦被上传到远程代码管理平台,就意味着有较被泄漏的风险,后果不堪设想。因此,很多知名公司都会对代码管理平台严防死守,严格禁止用户上传敏感信息。用户一旦上传了敏感信息,就要付出很大的成本去治理。用户通常需要通过git reset 回滚版本或者git filter-repo重写仓库commit,然后再强制push到远程仓库清理敏感信息。这将对用户来说是非常糟糕的事情。

因此,用户最好在代码commit之前,通过git自带的pre-commit hook机制检查staged区中的代码,防止敏感信息被commit到本地仓库。

敏感信息检查

简介

介绍一下用到的两款工具:

pre-commit

pre-commit 是一个开源的git hook管理框架,可以管理多种语言的git hooks。 pre-commit自带丰富的hooks库,不仅用于代码安全治理,多数开发人员也会用pre-commit提供的hooks检查代码语法、代码格式化等功能。
gitleaks

gitleaks 是gitlab推荐的一款开源的静态代码扫描工具(SAST),常用于git 仓库代码扫描和敏感信息防御。

安装

pre-commit是利用python开发的,安装很简单。例如在linux平台下可以通过pip安装:

bash 复制代码
pip install pre-commit
#执行pre-commit验证命令
pre-commit

更多安装方式,参见官方文档: https://pre-commit.com/#install

配置

pre-commit可以自动下载远程hooks代码、编译、执行。在使用pre-commit之前,需要您在仓库根目录下创建一个.pre-commit-config.yaml配置文件。

参考示例:

yaml 复制代码
repos:
#第一个repo是gitleaks支持的pre-commit hooks仓库。本案例主要使用的hooks。
-   repo: https://github.com/gitleaks/gitleaks.git
    rev: v8.18.1
    hooks:
    -   id: gitleaks
#第二个repo地址是pre-commit自带的hooks插件。与敏感信息扫描无关,主要用于说明pre-commit可以管理丰富的hooks插件,大家可以自行研究。
-   repo: https://github.com/pre-commit/pre-commit.git
    rev: v4.5.0 
    hooks:
    -   id: check-added-large-files
        args: ['--maxkb=51200']

安装hooks

进入已配置.pre-commit-config.yaml的仓库,执行下面操作:

bash 复制代码
#1. 根据仓库.pre-commit-config.yaml 自动下载、安装hooks文件。
pre-commit install-hooks
#2. 安装pre-commit 到git hooks目录。
pre-commit install

以上命令,pre-commit将从gitleaks仓库自动下载代码,并执行"go install"安装gitleaks 二进制文件。除了golang,pre-commit还支持多种语言环境。

显示结果:

验证

pre-commit安装完成以后,我们随意添加一些包含敏感信息的代码文件,验证pre-commit是否能够检查出敏感信息来。

比如: 复制 ~/.ssh/id_rsa文件到代码仓库。

显示结果:

跳过hooks

如果您发现检查结果不符合预期,希望跳过某项检查,可使用SKIP环境变量指定跳过的hooks列表(逗号分隔)。

bash 复制代码
SKIP=gitleaks git commit -m "update"

显示结果

自动安装

如果您不想每个仓库都执行一遍"pre-commit install",Pre-commit提供了一个"init-templatedir"子命令,允许您安装pre-commit到git的系统初始化模版目录。您在执行git init/git clone的时候,pre-commit文件被自动copy到新仓库的".git/hooks/"目录下。.git/hooks/目录下的pre-commit文件是pre-commit hooks的主程序,会按照仓库中的.pre-commit-config.yaml配置文件执行不同的hooks插件。

但您仍需要为每个仓库准备.pre-commit-config.yaml配置文件,并执行pre-commit install-hooks安装需要的hooks插件。

根据您的系统环境不同,Git的TemplateDir默认路径也不一样。您可以通过
git config --list --show-origin来查看git的home目录,Git的TemplateDir通常为home下的"templates"目录。例如: "/usr/share/git-core/templates"。

配置自动安装pre-commit,执行:

bash 复制代码
#pre-commit init-templatedir <git init的TemplateDir路径>
pre-commit init-templatedir /usr/share/git-core/templates

总结

Pre-commit还有很多玩法,暂时先介绍到这里。比如,如何开发一个hooks工具,感兴趣的朋友可以深入研究一下pre-commit。

gitleaks 是一个很不错的SAST工具,不仅可以全量扫描大批量的代码仓库,也可以基于某次扫描之后的新增代码。

相关推荐
2401_859049083 分钟前
git submodule update --init --recursive无法拉取解决
前端·chrome·git
darkb1rd2 小时前
二、PHP 5.4-7.4版本演进与安全改进
安全·php·webshell
珠海西格2 小时前
远动通信装置为何是电网安全运行的“神经中枢”?
大数据·服务器·网络·数据库·分布式·安全·区块链
格林威2 小时前
Baumer相机铸件气孔与缩松识别:提升铸造良品率的 6 个核心算法,附 OpenCV+Halcon 实战代码!
人工智能·opencv·算法·安全·计算机视觉·堡盟相机·baumer相机
K·Herbert3 小时前
OpenClaw 私人电脑部署风险
人工智能·安全·编辑器
枷锁—sha4 小时前
【CTFshow-pwn系列】06_前置基础【pwn 035】详解:利用 SIGSEGV 信号处理机制
java·开发语言·安全·网络安全·信号处理
EverydayJoy^v^4 小时前
RH134学习进程——十一.管理网络安全
学习·安全·web安全
zhengfei6114 小时前
Burp Suite 与AI之间的桥梁。
网络·安全·自动化
大模型玩家七七4 小时前
证据不足 vs 证据冲突:哪个对模型更致命
数据库·人工智能·pytorch·深度学习·安全
是店小二呀4 小时前
Git 深度学习笔记:从初始化到核心操作机制解析
笔记·git