使用git保护web项目目录

使用git保护web项目目录,git,security,content-management-system,Git,Security,Content Management System,我正在一个cms项目上工作,该项目是在一个非常不安全的服务器上建立的,有许多其他项目是我无法控制的 最近,未知攻击者通过未知向量放置、替换和编辑JS文件,添加恶意代码。-主人拒绝看到问题,也拒绝帮助寻找漏洞。 客户拒绝更换主机或升级到一个完整的根服务器,我可以加强自己 为了保护我的项目,我想让git监控可公开访问的目录,这样我就可以通过一个钩子收到更改通知,并通过简单的重置修复整个项目 问:有什么理由我不应该这样做吗?这可能会带来我现在看不到的新的安全问题吗?您不应该使用这样的服务器。如果有人可

我正在一个cms项目上工作,该项目是在一个非常不安全的服务器上建立的,有许多其他项目是我无法控制的

最近,未知攻击者通过未知向量放置、替换和编辑JS文件,添加恶意代码。-主人拒绝看到问题,也拒绝帮助寻找漏洞。 客户拒绝更换主机或升级到一个完整的根服务器,我可以加强自己 为了保护我的项目,我想让git监控可公开访问的目录,这样我就可以通过一个钩子收到更改通知,并通过简单的重置修复整个项目


问:有什么理由我不应该这样做吗?这可能会带来我现在看不到的新的安全问题吗?

您不应该使用这样的服务器。如果有人可以更改您的文件系统上的文件,他也可能会更改web或应用程序服务器或git之类的可执行文件的配置。如果您的系统以这种方式损坏,您甚至不能信任git的输出

一般来说,git可以检查存储库的完整性,请参见git fsck。此外,它还可以显示工作目录和索引之间的差异,请参见git status。但它们有一些缺陷:攻击者可以创建本地提交。在这种情况下,fsck通过,git status的输出为空。因此,您必须验证您仍然具有相同的ref

如果您忽略了目录或文件,atttacker可能会使用它们将代码注入您的应用程序中。例如,RubyonRails等web框架有自己的tmp目录,并使用它来缓存响应。这个目录通常被忽略,因此git不关心是否有人操纵这些文件

根据您的Web服务器配置,一个简单的git克隆您的webroot中的\u repo可能会发布.git目录的内容。在这种情况下,您已经发布了源代码和完整的历史记录,存储库的克隆包含了整个历史记录,包括作者姓名和电子邮件地址

当然,您不应该授予用户对从中克隆的存储库的写入权限。否则,攻击者可能会将其本地提交推送到您的存储库。可能很难检测到这样的提交,因为他可能会使用历史记录中的电子邮件地址、姓名和提交消息。这可以通过使用签名提交并检查它们来避免

如果您意识到这些缺陷,那么git将确保源代码的完整性,正如您所期望的那样。但它不会监控这种状态,也不会主动告诉你是否发生了变化。如果您签出某个文件并离开,git不会阻止其他人更改文件。您只能回来查看更改并可能恢复它们