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

问题描述 投票:0回答:3

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

在我看来,您不希望这些文件夹可见,就像您不希望显示 PHP 文件的内容一样。 解决方案不是将 Web 服务器配置为不提供“.hg”目录吗? 安全问题是否比这更严重? 我真的不知道。 非常感谢您的协助!

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

  • 从 Staging 进行更快的部署(相对于每次部署都创建一个新副本)
  • 轻松快速的回滚能力
  • 能够验证产量是否保持不变(通过
    hg st

欢迎替代方案。

谢谢!

php web-applications deployment mercurial security
3个回答
8
投票

确实,如果可以依赖默认情况下不提供

.svn
/
.hg
目录,那就没问题了。事实上,某人(新手/新开发者/在糟糕的一天经历过)做了一点改变,破坏了这些设置,并且“没有出问题”并没有注意到保护已经消失。瞧,您的源代码向全世界开放,甚至可能还存储了密码和秘密。这并不是说正确的设置会出问题,而是只要进行微小的、容易掩盖的改变,它们就可能会出问题,所以为什么不谨慎行事呢?

在严格控制的发布过程中,我发现更容易将某些分支/标签添加到某些文件夹,并且切换到已通过测试的较新分支/标签只需将文档根从

export
更改为
/path/project/release-123 
(如果需要的话,切换回
/path/project/release-124
也同样容易,甚至更快)。如果您的发布过程包含更多的小更改和错误修复,那么使用导出确实会很痛苦,但在我看来,增加的安全性是值得的。
在开发服务器上,所有内容都已经在(VPN-)IP 或证书上进行了过滤,因此我使用“最新和最好的”主干版本与版本控制目录进行结账,没有任何问题。

编辑:

Mercurial 和 Subversion 现在都将其数据保存在顶层的单个 .hg/.svn 目录中。由于人们通常会在大多数文件位于文档根目录“外部”的情况下进行签出(并且文档根目录可能是更下面的子目录),因此这是“很好”。只需确保您的版本控制目录

不是位于文档根目录内的网络服务器可访问的文件夹中,并且您可以保持签出而不是导出到那里,而不会出现太多问题。 我喜欢让我的 DocumentRoot 成为我的 Mercurial 存储库的克隆。 事实上,您甚至可以使用这样的钩子将该存储库配置为在推送时自动更新: release-123 这意味着您可以

[hooks] changegroup = hg update

4
投票

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

考虑到您限制对 .svn、.hg 或其他文件的访问。事实上,您在那里拥有这些文件夹会导致您必须不断地对它们实施限制,这是有风险的。人为错误确实会发生。


问候,阿林


1
投票

© www.soinside.com 2019 - 2024. All rights reserved.