通过检查存储库中的源,可以评估应用程序的安全级别。但是,如果没有人看代码,问题只会越来越多。幸运的是,GitHub拥有自己的安全专家,他们最近在多个Git存储库中发现了该木马。由于某些原因,这些存储库的所有者没有注意到他。尽管我们无法指示其他人如何管理自己的存储库,但我们可以从他们的错误中学习。在本文中,我们将研究用于存储库的有用技术。
探索您的存储库
这也许是最重要的建议。无论您是自己创建存储库还是将其移交给您,了解存储库的内容都很重要。至少,您需要了解所管理代码库的基本组件。如果经过几十次合并后,会出现一个随机文件,则可以轻松发现它,因为它会给您带来问题。接下来,您将需要检查一下以解决问题,然后确定其命运。
尽量不要添加二进制文件
Git最初是为文本文件而设计的,无论是C,Python或Java代码,还是JSON,YAML,XML,Markdown,HTML等:
$ cat hello.txt
This is plain text.
It's readable by humans and machines alike.
Git knows how to version this.
$ git diff hello.txt
diff --git a/hello.txt b/hello.txt
index f227cc3..0d85b44 100644
--- a/hello.txt
+++ b/hello.txt
@@ -1,2 +1,3 @@
This is plain text.
+It's readable by humans and machines alike.
Git knows how to version this.
Git不喜欢二进制文件:
$ git diff pixel.png
diff --git a/pixel.png b/pixel.png
index 563235a..7aab7bc 100644
Binary files a/pixel.png and b/pixel.png differ
$ cat pixel.png
PNG
▒
IHDR7n $gAMA
abKGD݊ tIME
-2R
IDA c` ! 3%tEXtdate:create2020-06-11T11:45:04+12:00 r.%tEXtdate:modify2020-06-11T11:45:0
二进制文件中的数据无法以与纯文本相同的方式进行解析,因此,如果二进制文件中发生某些更改,则必须将其完全覆盖。
更糟糕的是,您无法自己检查(读取和解析)二进制数据。
除了常用的POSIX工具之外,您还可以使用git diff查找二进制文件。当您尝试使用--numstat选项运行diff时,Git将返回null:
$ git diff --numstat /dev/null pixel.png | tee
- - /dev/null => pixel.png
$ git diff --numstat /dev/null file.txt | tee
5788 0 /dev/null => list.txt
如果您正在考虑将二进制文件添加到存储库中,请停下来思考。如果在构建过程中生成了二进制文件,那么为什么要将其添加到您的仓库中?如果确定这样做是有意义的,请确保在README文件或类似位置中描述为什么保留二进制文件以及更新二进制文件的协议。应谨慎进行更新,因为每次对Blob进行更改时,存储空间都会增加一倍。
第三方图书馆必须保留为第三方
开源的众多好处之一是您可以自由使用和重新分配未编写的代码,但是有很多充分的理由不将第三方库托管在您自己的存储库中。首先,您将必须独立检查所有这些代码及其进一步的更新,以确保库是可靠的。其次,当您将第三方库复制到Git存储库时,它会将焦点从主要项目转移到其他地方。
使用Git子模块管理外部依赖项。
不要盲目使用git add
如果您的项目成功编译,请不要使用git add命令。(例如,“。”是当前目录)。如果您不是手动编译项目而是使用IDE来管理项目,则这一点尤其重要。在IDE管理项目时,跟踪添加到存储库中的内容可能非常困难。因此,仅添加您自己创建并准备添加的内容很重要,而不添加任何神秘地出现在项目文件夹中的新对象。
因此,在运行git add之前,请检查将添加到存储库中的内容。如果您看到一个陌生的对象,请在运行make clean(或等效命令)后找出它的来源以及为什么它仍在您的项目目录中。
使用Git忽略
典型的项目目录包含许多隐藏文件,元数据和不必要的工件。您最好忽略这些对象:存在的对象越多,您越有可能被这种“垃圾”打扰,并且您会错过一些重要或危险的事情。
gitignore文件可以过滤掉不必要的东西。Github.com/github/gitignore提供了几个自定义的gitignore模板,您可以下载这些模板并将其托管在您的项目中。例如,Gitlab.com几年前就提供了这样的模板。
适度的代码库更改
当您收到“拉取”或“拉取请求”,或者通过电子邮件收到补丁时,应确保一切正常。您的工作是研究进入代码库的新代码并了解它的作用。如果您不同意其实现,或者更糟的是,不理解此实现,请向发件人写消息并要求澄清。学习在项目中占有一席之地的新代码没有错。此外,您这样做是为了用户的利益:在这种情况下,他们将清楚地了解您接受的更改以及原因。
承担责任
确保开源软件的安全是一项社区工作。探索代码库,防止混乱,并忽略您克隆的存储库中的潜在安全威胁。Git功能强大,但是它只是一个计算机程序,因此,管理存储库的最终责任在于您。
广告
Epic服务器是具有强大的AMD EPYC处理器和非常快速的Intel NVMe驱动器的Linux或Windows 虚拟服务器。像热蛋糕一样分散!