在我的研究中,我发现在部署在线 PHP 应用程序时将其“.hg”文件夹或“.svn”文件夹保留在生产服务器上存在一些问题。 不幸的是,我无法找到一个明确的解释来解释为什么这是一个问题。 我想更好地了解这种安全风险。
在我看来,您不希望这些文件夹可见,就像您不希望显示 PHP 文件的内容一样。 解决方案不是将 Web 服务器配置为不提供“.hg”目录吗? 安全问题是否比这更严重? 我真的不知道。 非常感谢您的协助!
如果有帮助,我想在服务器的生产存储库上保留版本控制的原因如下:
hg st
)欢迎替代方案。
谢谢!
确实,如果可以依赖默认情况下不提供
.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
除了差异文件被意外提供给客户端的风险之外,我没有看到任何其他安全问题。
考虑到您限制对 .svn、.hg 或其他文件的访问。事实上,您在那里拥有这些文件夹会导致您必须不断地对它们实施限制,这是有风险的。人为错误确实会发生。
问候,阿林