0

情况是这样的,我的网站有一个托管包,它不允许我访问 php.ini 或 httpd.conf。我已经接受了各种想要保留当前托管包的客户。

我想要做的是允许访问特定路径上的目录,在我的域中,我可以保留 php 包含在其中。然后我可以在各个客户端站点之间共享,所以我不必访问所有站点并更新所有文件。

我的一个朋友提到 curl 和 fopen 可以做到,但会增加延迟。是否可以使用(我对它们知之甚少).htaccess 文档来打开该目录以只读访问来自其他 Web 服务器的包含请求。显然,我想让我的网络空间尽可能安全。请提供建议和帮助。

4

1 回答 1

1

请记住,使用 URL 通过 curl/fopen 访问您的包含将意味着您正在访问这些 PHP 包含,就好像它们是常规 PHP 脚本一样。除非您将服务器配置为直接以纯文本形式提供 .php 文件,否则包含脚本将被执行,您得到的只是它们的输出。

例如

include.php在您的集中式“包含”服务器上

<?php

function foo() {
    echo 'hello from foo';
}

客户端站点上的一些脚本:

<?php
include('http://includes.example.com/inculde.php');

基本上将不包括任何内容。该include.php脚本不产生任何输出。您将无法foo()在客户端站点中获得可用的功能,因为远程站点没有返回 PHP 代码。

另一方面,如果你有这样的事情:

<?php
echo '<' . '?php';
?>               

function foo() {
  echo 'foo';
}

那么你会得到恰好是 PHP 代码的纯文本,并且包含会按预期工作。

但是,您不应该使用include()远程文件。它为恶意用户打开了一整套攻击向量。也许您有 DNS 故障,并且攻击可以重新映射 的 IP include.example.com,因此您的客户端站点现在正在从其控制的服务器加载代码,并且现在您的所有客户端都受到了危害。

也许存在网络故障,无论出于何种原因,您的中央包含服务器都无法从客户端机器上访问 - 现在他们的站点已经死在水中,因为您的服务器不可用。

基本上,您在系统中引入了单点故障,该故障将同时导致您的所有客户端失效。根本不是一个好的系统。

于 2013-05-09T14:41:19.177 回答