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

相关推荐
.Ayang11 分钟前
tomcat 后台部署 war 包 getshell
java·计算机网络·安全·web安全·网络安全·tomcat·网络攻击模型
Hacker_Oldv18 分钟前
开放性实验——网络安全渗透测试
安全·web安全
Rverdoser2 小时前
Linux环境开启MongoDB的安全认证
linux·安全·mongodb
速盾cdn3 小时前
速盾:CDN缓存的工作原理是什么?
网络·安全·web安全
IPFoxy6663 小时前
跨境出海安全:如何防止PayPal账户被风控?
安全
龙信科技3 小时前
【电子物证培训】龙信助力三明市公安局电子物证取证竞赛
安全
zhd15306915625ff4 小时前
库卡机器人维护需要注意哪些事项
安全·机器人·自动化
安全二次方security²4 小时前
ARM CCA机密计算安全模型之概述
安全·安全模型·cca·机密计算·领域管理扩展·arm-v9·平台安全服务
黑客Ela5 小时前
网络安全中常用浏览器插件、拓展
网络·安全·web安全·网络安全·php