0

我目前正在尝试允许我的远程服务器(B)使用 php 包含影响我的本地服务器(A)。作为一个小测试,我在服务器 A 中放置了一个 php 文件,其中包含来自服务器 B 的文件,我允许通过 php.ini 包含 url 并更改了我的用户代理。

服务器 B 上的文件包含用于创建应该在服务器 A 上创建的小测试文件的代码。问题是每次我运行服务器 A 的包含文件时,都会在服务器 B 上创建该文件,而我真的希望它在服务器 A 上创建.

服务器 A 的代码:

include("http://www.XXXXXXXXX.com/Test.php");

服务器 B 的代码:

   $ourFileName = "testFile.txt";
   $ourFileHandle = fopen($ourFileName, 'w') or die("can't open file");
   fclose($ourFileHandle);
4

2 回答 2

0

在服务器 B 上,将以下行放入您的.htaccess文件中:

AddType text/plain .php

您需要服务器 B 输出的代码供服务器 A 读取。目前它正在服务器 A 上处理。

这将使您的代码对公众可见。它还将阻止在该目录中执行任何其他PHP。您可以使用<Files>指令使其仅适用于特定文件,但它始终对公众可用。在 PHP 和.htaccess.

如果您不希望这种情况发生,也有办法做到这一点,但它们有点复杂。

编辑 以响应请求
如果您仍想在服务器 B 上执行 PHP 并有选择地包含文件,我建议创建一个includer.php内容如下的新文件:

<?php
if ('my-secret-key' == $_GET['auth']) {
    if (is_readable($_GET['file'])) {
        header('Content-type: text/plain');
        echo file_get_contents($_GET['file']);
    } else {
        header('Status: 404 Not found');
        header('Content-type: text/plain');
        die('<?php /* File not found */ ?>');
    }
} else {
    header('Status: 403 Forbidden');
    header('Content-type: text/plain');
    die('You do not have permission to access this page.');
}

然后在您的服务器 A 上:

include ('http://example.com/includer.php?auth=my-secret-key&file=Test.php');

如果可以的话,您还应该考虑在服务器 B 上使用basename()on$_GET['file']以提高安全性,并设置hash()您的auth参数。

于 2011-06-06T03:53:46.710 回答
0

您所做的事情引发了多个安全问题。虽然 php 非常灵活并且可以配置为执行此类操作,但我不建议您采用这种方式。

还有其他方法可以让服务器“a”在远程主机“b”上创建文件。

就个人而言,我非常喜欢ssh 功能以相对安全的方式执行远程任务。

于 2011-06-06T04:01:57.187 回答