我把我的 .git 目录留给了 Web 服务器读取,这会有什么风险?

我把我的 .git 目录留给了 Web 服务器读取,这会有什么风险?

在我的某个 Web 应用程序中,过去几周我无意中将 .git 目录保留在 Web 服务器可读取的范围内。索引列表已禁用。访问 website.com/.git URL 会导致 404 错误,该错误与任何其他 404 错误没有区别,但浏览 website.com/.git/config 等则会下载该文件。

我的应用程序存在哪些风险?是否有可能泄露足够的信息,导致有人下载整个应用程序的源代码?

答案1

是的,可以下载整个存储库内容(包括历史记录)——只需简单git clone操作即可。但是,这假设有人知道关于该目录的存在.git...很可能没人注意到它。您可以随时检查 Web 服务器的日志以确保无误。

答案2

git clone文档根目录上的简单操作并不完全准确。无法使用“哑的“服务器,例如意外通过 HTTP 暴露 .git,除非git update-server-info在服务器上执行。虽然一些元数据可用,但获取.git/objects目录的内容(即有趣的内容)并不总是可能的。可以恢复对象不是已打包。生产服务器上的工作副本/存储库不应该出现这种情况。

对于已提交更改但未推送到远程的开发机器,情况就不同了。在这种情况下,通常不会调用垃圾收集器,除非您调用git gc,因此这些文件还不是包文件的一部分。您可以通过 HTTP 恢复自上次推送以来提交的文件。

更新服务器信息基本上创建了 refs (.git/info/refs) 和 packfiles (.git/objects/info/packs) 的映射。而 .git/打包引用可以用来替代第一个,如果不启用目录索引或实际上强制执行 SHA-1(这从一开始就是一个坏主意),就不可能获取包文件。

相关内容