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

相关推荐
weixin_4426434221 分钟前
推荐FileLink数据跨网摆渡系统 — 安全、高效的数据传输解决方案
服务器·网络·安全·filelink数据摆渡系统
星尘安全1 小时前
安全工程师入侵加密货币交易所获罪
安全·区块链·漏洞·加密货币
Winston Wood2 小时前
一文了解git TAG
git·版本控制
喵喵先森2 小时前
Git 的基本概念和使用方式
git·源代码管理
newxtc3 小时前
【支付行业-支付系统架构及总结】
安全·支付宝·第三方支付·风控系统·财付通
newxtc3 小时前
【旷视科技-注册/登录安全分析报告】
人工智能·科技·安全·ddddocr
成都古河云3 小时前
智慧场馆:安全、节能与智能化管理的未来
大数据·运维·人工智能·安全·智慧城市
Gworg3 小时前
您与此网站之间建立的连接不安全解决方法
安全
xianwu5434 小时前
反向代理模块
linux·开发语言·网络·git
ac-er88884 小时前
MySQL如何实现PHP输入安全
mysql·安全·php