将Mercurial存储库部署到生产 - 安全问题和提示

时间:2010-10-05 20:54:49

标签: php web-applications deployment mercurial security

在我的研究中,我发现了一些关于部署在线PHP应用程序的问题,同时在生产服务器上保留了“.hg”文件夹或“.svn”文件夹。不幸的是,我无法找到一个明确的解释,为什么这是一个问题。我想更好地了解这种安全风险。

在我看来,您不希望这些文件夹看起来比您希望显示的PHP文件的内容更多。解决方案不是将Web服务器配置为不提供“.hg”目录吗?安全问题是否比这更深入?我真的不知道。非常感谢您对此的帮助!

如果它有用,我想在服务器的生产存储库上保留版本控制的原因如下:

  • 从分段更快部署(相对于每个部署执行全新副本)
  • 简单快速的回滚功能
  • 验证生产保持不变的能力(通过hg st

欢迎替代方案。

谢谢!

3 个答案:

答案 0 :(得分:8)

实际上,如果默认情况下可以依赖不提供.svn / .hg目录,那就没问题了。实际上,有人(newbee / new develop /经历过糟糕的一天)会做出一点点改变,破坏这些设置,并且“没有出错”并没有注意到保护已经消失。 Voilà,您的源代码向全世界开放,可能甚至存储了密码&秘密。这并不是因为正确的设置会出现问题,而是通过一个轻微的,轻易掩盖的改变,它们可能会出错,所以为什么不安全地玩呢?

在严格控制的发布过程中,我发现export某些文件夹的某些分支/标签更容易,并且切换到较新的分支/标记,它们在测试中幸存下来只是从{{更改文档根目录1}}到/path/project/release-123(让它变得容易,甚至更快,切换回/path/project/release-124可能需要在那里)。如果您的发布过程中有更多的小变更和&错误修正,使用导出确实很痛苦,但在我看来增加的安全性是值得的。

在开发服务器上,所有内容都已经过滤(VPN-)IP或证书,因此我使用'最新&带有版本控制dirs的最大`trunk版本没有任何问题。

编辑

两者 Mercurial和Subversion现在将数据保存在顶级的单个.hg / .svn目录中。通常情况下,大多数文件都在外面文档根目录(并且文档根目录可能是一个子目录向下),这是罚款。只需确保您的版本控制目录位于文档根目录中的Web服务器的可访问文件夹中,您可以保留签出,而不是在没有太多问题的情况下导出。

答案 1 :(得分:4)

我很喜欢让我的DocumentRoot成为我的mercurial存储库的克隆。实际上,您甚至可以使用这样的钩子将该repo配置为自动更新:

[hooks]
changegroup = hg update

这意味着您可以hg push到服务器上的repo,您​​将自动更新网站结帐。不少人都在这样做。

答案 2 :(得分:1)

除了意外地将差异文件提供给客户端的风险之外,我没有看到任何其他安全问题。

考虑您限制对.svn,.hg或其他的访问权限。你有那些文件夹的事实导致你不得不经常对他们强制执行限制,这是有风险的。人为错误确实发生了。

问候,Alin