[安全]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工具,不仅可以全量扫描大批量的代码仓库,也可以基于某次扫描之后的新增代码。

相关推荐
int WINGsssss1 小时前
Git使用
git
用户0760530354383 小时前
Git Revert:安全移除错误提交的方式
git
小小工匠3 小时前
Web安全 - 路径穿越(Path Traversal)
安全·web安全·路径穿越
不灭锦鲤5 小时前
ssrf学习(ctfhub靶场)
网络·学习·安全
网络研究院8 小时前
如何安全地大规模部署 GenAI 应用程序
网络·人工智能·安全·ai·部署·观点
DonciSacer12 小时前
TryHackMe 第6天 | Web Fundamentals (一)
安全
Good_Starry15 小时前
Git介绍--github/gitee/gitlab使用
git·gitee·gitlab·github
云卓科技16 小时前
无人机之数据提取篇
科技·安全·机器人·无人机·制造
山兔116 小时前
工控安全防护机制与技术
安全
HEX9CF17 小时前
【CTF Web】Pikachu xss之href输出 Writeup(GET请求+反射型XSS+javascript:伪协议绕过)
开发语言·前端·javascript·安全·网络安全·ecmascript·xss