我正在努力了解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。