部署Mercurial代码仓库到生产环境——安全问题与技巧

12
在我的研究中,我发现有人担心在生产服务器上部署在线PHP应用程序时会留下其".hg"文件夹或".svn"文件夹。不幸的是,我没有找到清晰的解释为什么这是一个问题。我想更好地了解这个安全风险。
对我来说,似乎您不希望这些文件夹可见,就像您不希望显示PHP文件的内容一样。解决办法不就是配置Web服务器不服务于“.hg”目录吗?安全问题比这更深吗?我真的不知道。非常感谢您对此的帮助!
如果有帮助,我想保留版本控制在服务器的生产库中的原因如下:
  • 从Staging更快速的部署(与每次部署进行新的复制相比)
  • 简单且快速的回滚功能
  • 通过hg st验证生产是否保持不变的能力
欢迎提供替代方案。
谢谢!
3个回答

8
事实上,如果默认情况下不依赖于服务于.svn / .hg目录,那就没有问题了。但事实上,有人(新手/新开发者/经验丰富的人在糟糕的一天)做了一个小改变,破坏了这些设置,并且由于“没有出现任何问题”,没有注意到保护已经消失了。你的源代码就这样暴露给全世界,甚至可能会存储密码和机密信息。并不是说正确的设置会出现问题,而是只要稍作修改,它们就可能出问题,所以为什么不保险点呢?
在一个严格控制的发布过程中,我发现将某些分支/标签导出到特定文件夹更容易,而切换到经过测试的新分支/标签只需将文档根从/path/project/release-123更改为/path/project/release-124(这样做同样容易,甚至可能更快,如果需要回到release-123)。如果你有一个更多的小改变和错误修复的流程,使用导出确实可能很麻烦,但我认为增加的安全性是值得的。
在开发服务器上,所有内容都已经被(VPN-)IP或证书过滤,所以我在那里使用带有版本控制目录的“最新和最棒”的主干版本检出而没有任何问题。
编辑:
现在,Mercurial和Subversion都将它们的数据保存在顶层的单个.hg/.svn目录中。由于通常会进行大部分文件位于文档根目录之外的检出(而文档根目录可能进一步向下是子目录),因此这是可以的。只需确保您的版本控制目录不在文档根目录内的可访问文件夹中,您就可以在那里保留检出而没有太多问题。

4

我喜欢将我的DocumentRoot设置为我的Mercurial仓库的克隆。实际上,您甚至可以使用此类钩子配置该存储库以在推送时自动更新:

[hooks]
changegroup = hg update

这意味着您可以向服务器上的repo执行"hg push"命令,然后网站检出将自动更新。许多人都在这样做。

听起来很有趣,尽管并没有真正回答问题。 - Craig McQueen
这并不是一个问题。他说为什么不,我说就去做吧。 - Ry4an Brase
你可以使用相同的方法来使用 'hg archive'(导出)changegroup 钩子。 - Ton Plomp
完全正确。更新具有不重新创建未更改的文件的优点,但归档可以保证您获得干净的检出。 - Ry4an Brase

1

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

考虑到你限制了对 .svn、.hg 或其他文件夹的访问。事实上,你有这些文件夹会导致你不断强制执行对它们的限制,这是有风险的。人为错误确实会发生。

祝好,Alin


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接