评估allow_url_include或备选方案的风险


Assessing risks of allow_url_include, or alternatives

我正在努力了解allow_url_include的实际风险,或者为这种情况找到一些实用的替代方案:

服务器A有一个基于php的网页,它从许多远程服务器(服务器B到J)获取有关其当前状态的数据。然后,服务器A解析返回的数据并显示摘要。获取数据并将其发送回的代码是一个PHP脚本,它驻留在服务器B到J上,随着更多服务器的添加,保持最新变得越来越困难——每当摘要页面上需要新功能时,必须在每个服务器上更新该文件,以匹配摘要代码期望发送回的内容。

一个明显的解决方案是include获取数据的代码,因此服务器B到J上的代码看起来像:

include("http://ServerA/stats/getData.php.source");
echo base64_encode(serialize(getData()));

但几乎所有关于allow_url_include的SO问题都只是说"不要这么做"。我一直在努力寻找与此相关的具体风险,以及如何减轻这些风险。

这里的目标是将所有代码都放在服务器A上,这样维护/功能添加就更容易处理了。nfs装载可能很实用,但对于单个文件来说似乎有点过分。在服务器a上编写一个脚本,使用ssh将新代码推送到每台服务器也是可能的,但会减慢开发周期。

服务器B到J上没有其他开发人员,所以allow_url_include真的有这样的风险吗?它还能做什么?

如果应用程序层和系统层都是BOTH安全的,以至于你认为没有人能进入,那么允许类似allow_url_include的东西没有错

这可能非常复杂,因为您需要在应用程序外部设置一层来监控传入请求。然而,这并非不可能!

其他帮助:

  • PhpSecInfo
  • DevShed

除非您100%确信您可以将服务器安全保护到超过合理的级别,否则我建议您使用其他选项,如cURL