我试图理解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 mount可能很实用,但对于单个文件来说似乎有些过分。在服务器A上编写脚本以使用ssh将新代码推送到每个服务器也是可能的,但会减慢开发周期。
服务器B到J上没有其他开发人员,所以allow_url_include真的有这样的风险吗?它还能做什么?
答案 0 :(得分:1)
如果应用程序层和系统层 BOTH 安全到您认为没有人可以进入的程度 - 那么允许像 allow_url_include 这样的内容没有任何问题/ p>
这可能非常复杂,因为您需要在应用程序外部监视传入请求的图层。然而,这并非不可能!
其他需要帮助的事项:
除非您 100%确定您可以将服务器保护到超过合理的级别,否则我建议您使用 cURL 而不是。