PSA:隐藏你的 .git/config 目录
发布于 作者: Eric L. Barnes
许多开发人员都有做蠢事导致安全问题的恐怖经历。几年前,我正在创建一个开源应用程序,不小心提交并推送了一个包含我的电子邮件登录名和密码的配置文件。它一直没有被发现,直到一位非常友善的人给我发邮件告诉我发生了什么。直到今天,每当我想到这件事,我都会感到胃里一阵怪异。重大失误!
当然,上传敏感信息已经是一个持续多年的问题,而且 卫报 在 2013 年就曾报道过人们使用 GitHub 搜索查找私有 ssh 密钥。
另一个常见的安全问题是将你的 .git
目录暴露在你的公共站点上。 Jamie Brown 写道,在他分析的 150 万个网站中,有 2402 个网站暴露了它们的 .git 文件夹,并且可以下载。
博客 python sweetness 在 2013 年写道
根据一个快速的 gevent 脚本,Alexa 排名前 100 万个网站中的前 100,000 个网站中,有超过 0.7% 的网站将它们的 .git 目录暴露在外部世界。
推荐的也是最安全的方式是将应用程序的文档根目录设置为一个 /public
目录,并将所有点文件放在该目录之外,这样它们就无法从 Web 直接访问。大多数框架(包括 Laravel)都是以这种方式设置的。但是,许多可下载的应用程序并非如此。WordPress 就是一个例子,它的一切都运行在一个目录中,如果你使用 Git 与它一起使用,很容易犯将 .git
目录推送到公共可见位置的错误。
Chris Cornutt 是 PHPDeveloper 的作者,今天 在推特上 提到一个名为 greedy-git 的包,它可以用来分析远程 .git 文件并从中找到私有信息。有了它,人们就可以轻松地找到存储在这个目录中的任何私有信息。
Jamie 说
其中一些 .git 存储库是无害的,但是从随机样本中可以看出,许多存储库包含危险的信息,这些信息提供了直接攻击网站的途径。数百个存储库列出了数据库密码,或者包含了 Amazon AWS 或 Google Cloud 等服务的 API 密钥。另一些包含了它们自己的 Web 服务器的 FTP 详细信息。许多存储库包含 .SQL 文件中的数据库备份,或者包含了旨在限制访问的隐藏文件夹的内容。
这似乎是一个普遍存在的问题,但解决方法很简单。以下是在 nginx 和 apache 上隐藏此目录的两个示例
Nginx
location ~ /\.git { deny all;}
Apache .htaccess
RedirectMatch 404 /\.git
如果你的 .git 目录已被暴露,Jamie 建议你假设有人已经下载了所有内容,并弄清楚他们可能看到了什么。
本文使用的资源