我正在开发一个在非常不安全的服务器上设置的cms项目,其中包含许多其他项目。
最近,JS文件被放置,替换和编辑,未知攻击者通过未知向量添加恶意代码。 - 主持人拒绝看到问题或帮助找到漏洞。 客户拒绝更改主机或升级到完全成熟的root服务器,我可以自己强化。(叹息) 为了保护我的项目,我想到了可公开访问的目录git,所以我可以通过钩子通知变化,并通过简单的重置修复整个事情。
问题:我有理由不这样做吗?这可能会打开我现在没有看到的新安全问题吗?
答案 0 :(得分:0)
你不应该使用这样的服务器。如果有人可以更改文件系统上的文件,他也可能会更改Web或应用程序服务器或git等可执行文件的配置。如果你的系统以这种方式被破坏,你甚至不能相信git的输出。
通常,git可以检查存储库的完整性(请参阅git fsck
)。此外,它还可以显示工作目录和索引之间的差异(请参阅git status
)。但是他们有一些陷阱:攻击者可以创建本地提交。在这种情况下,fsck
通过,git status
的输出为空。因此,您必须验证您仍然具有相同的参考。
如果您忽略了目录或文件,则攻击者可能会使用它们在您的应用程序中注入其代码。例如,像rails上的ruby这样的web框架有自己的tmp
目录,并使用它来缓存响应。这个目录通常被忽略,因此如果有人操纵这些文件,git并不关心。
根据您的网络服务器配置,您的webroot中的简单git clone your_repo
可能会发布您的.git
目录的内容。在这种情况下,您已发布源和完整历史记录(存储库的克隆包含整个历史记录,包括作者姓名和电子邮件地址)。
当然,您不应该授予用户对您克隆的存储库的写权限。否则,攻击者可能会将其本地提交推送到您的存储库。可能很难检测到这样的提交,因为他可能会使用电子邮件地址,命名和提交历史记录中的消息。通过使用签名提交并检查它们可以避免这种情况。
如果您意识到这些陷阱,那么git会像您期望的那样确保源代码的完整性。但它并没有监控这种状态,它并没有主动告诉你是否有变化。如果你结账并离开,git不会阻止其他人更改文件。您只能回来查看更改并可能还原它们。