anonymous coward Asked: 2010-03-06 07:18:05 +0800 CST2010-03-06 07:18:05 +0800 CST 2010-03-06 07:18:05 +0800 CST 偏执的系统管理员 -vs- 过时的 PHP 版本 772 偏执的系统管理员如何自信地跟上最新的稳定 PHP 版本?(安全修复程序经常出现)。 这是一个生产服务器,所以“破坏性的东西”把我的家伙吓死了。维护停机时间不是问题。 具体来说,我们正在运行最近的 Suse Enterprise Linux,但通用或更一般的答案是完全可以接受的。 您如何处理生产机器的安全更新?我们对这个家伙如此害怕只使用包管理器“更新”的东西如此无知? 有什么建议吗? php security upgrade 4 个回答 Voted voretaq7 2010-03-06T07:46:38+08:002010-03-06T07:46:38+08:00 我处理 PHP 的方式与处理其他所有事情的方式相同:首先升级开发环境(生产环境的 VMWare 克隆),对其进行回归测试,然后使用我们用于 VMWare 主机的相同部署模板将其提升到生产环境。(如果您使用包管理器进行升级,您将使用相同的包)。 作为额外的绝缘层,我们的生产环境由成对的冗余主机组成,其中一台主机从生产轮换中取出以进行升级,然后在我们切换到该主机以升级其合作伙伴之前进行彻底测试。 作为一般规则,安全更新会尽快应用,非安全/非关键错误修复更新每季度应用一次,以最大限度地减少停机时间。 Warner 2010-03-06T07:23:37+08:002010-03-06T07:23:37+08:00 PHP 是我保持更新到当前版本的首要任务。我相信它比大多数事情都要少。 最终,您最好的选择是查看从当前版本到最新版本的每个变更日志,并切实权衡风险。 如果您正在谈论升级次要版本,例如 5.3.1 到 5.3.2,我不会太担心。 如果您从 5.2.x 升级到 5.3.x,您可能会引入一些兼容性问题。 如果您使用系统包,通常发行版不会引入会破坏现有性能的升级。RHEL 和 CentOS 修补旧版本以进行修复,直到主要发行版发布。通常为您进行测试,从而降低风险。我希望 SuSE企业会是类似的。 对于升级路径,最好的办法是在升级生产之前构建一个测试服务器并针对最新版本测试应用程序。 geocar 2010-03-06T08:43:00+08:002010-03-06T08:43:00+08:00 另一个不太受欢迎的答案是建立一个允许的 url 和功能的白名单。在 Apache 中,您可以通过结合代理和重写功能来做到这一点。 基本上,您进行了两次安装,一次具有精简配置:代理、重写和不执行代码;等等。任何“允许”的 URL(带有参数等)都会被代理到第二次安装。 然后,将自己添加到 PHP 的开发人员列表中,并仔细查看发行说明。任何时候你看到一些看起来可能是安全漏洞的东西,你在第一次安装时构建一个 shim 来检测这种故障,并向用户发送一个错误。 在这样的设置中,您需要将 POST 重定向到一个过滤器(如果您需要 POST;某些站点通过仅允许来自某些 IP 地址的 POST 就可以正常工作!),它可以查找允许的来源,并预先验证一切。 这样的白名单设置起来非常耗时,但是对于需要运行超过 PHP 的稳定寿命(似乎只有几年)的关键任务应用程序,这可能是利用大量 PHP 的绝佳方式应用程序也没有得到它们的漏洞。 Richard Holloway 2010-03-06T16:30:44+08:002010-03-06T16:30:44+08:00 除了上述之外,您还可以启用包回滚以防万一。 然后,如果您绝对确定在开发中运行良好的生产中出现问题,您至少可以在解决问题之前快速撤消更改。 有关Yum 中的示例,请参阅回滚 YUM 包。我相信其他包管理系统也有类似的。 我知道这是腰带和牙套,我同意华纳的观点。微小的变化不应该破坏任何东西。就我个人而言,我在 PHP 升级方面没有遇到任何问题,但安全总比抱歉好。
我处理 PHP 的方式与处理其他所有事情的方式相同:首先升级开发环境(生产环境的 VMWare 克隆),对其进行回归测试,然后使用我们用于 VMWare 主机的相同部署模板将其提升到生产环境。(如果您使用包管理器进行升级,您将使用相同的包)。
作为额外的绝缘层,我们的生产环境由成对的冗余主机组成,其中一台主机从生产轮换中取出以进行升级,然后在我们切换到该主机以升级其合作伙伴之前进行彻底测试。
作为一般规则,安全更新会尽快应用,非安全/非关键错误修复更新每季度应用一次,以最大限度地减少停机时间。
PHP 是我保持更新到当前版本的首要任务。我相信它比大多数事情都要少。
最终,您最好的选择是查看从当前版本到最新版本的每个变更日志,并切实权衡风险。
如果您正在谈论升级次要版本,例如 5.3.1 到 5.3.2,我不会太担心。
如果您从 5.2.x 升级到 5.3.x,您可能会引入一些兼容性问题。
如果您使用系统包,通常发行版不会引入会破坏现有性能的升级。RHEL 和 CentOS 修补旧版本以进行修复,直到主要发行版发布。通常为您进行测试,从而降低风险。我希望 SuSE企业会是类似的。
对于升级路径,最好的办法是在升级生产之前构建一个测试服务器并针对最新版本测试应用程序。
另一个不太受欢迎的答案是建立一个允许的 url 和功能的白名单。在 Apache 中,您可以通过结合代理和重写功能来做到这一点。
基本上,您进行了两次安装,一次具有精简配置:代理、重写和不执行代码;等等。任何“允许”的 URL(带有参数等)都会被代理到第二次安装。
然后,将自己添加到 PHP 的开发人员列表中,并仔细查看发行说明。任何时候你看到一些看起来可能是安全漏洞的东西,你在第一次安装时构建一个 shim 来检测这种故障,并向用户发送一个错误。
在这样的设置中,您需要将 POST 重定向到一个过滤器(如果您需要 POST;某些站点通过仅允许来自某些 IP 地址的 POST 就可以正常工作!),它可以查找允许的来源,并预先验证一切。
这样的白名单设置起来非常耗时,但是对于需要运行超过 PHP 的稳定寿命(似乎只有几年)的关键任务应用程序,这可能是利用大量 PHP 的绝佳方式应用程序也没有得到它们的漏洞。
除了上述之外,您还可以启用包回滚以防万一。
然后,如果您绝对确定在开发中运行良好的生产中出现问题,您至少可以在解决问题之前快速撤消更改。
有关Yum 中的示例,请参阅回滚 YUM 包。我相信其他包管理系统也有类似的。
我知道这是腰带和牙套,我同意华纳的观点。微小的变化不应该破坏任何东西。就我个人而言,我在 PHP 升级方面没有遇到任何问题,但安全总比抱歉好。