Влияет на сервер с удаленным PHP - PullRequest
0 голосов
/ 06 июня 2011

В настоящее время я пытаюсь разрешить моему удаленному серверу (B) влиять на мой локальный сервер (A) включением php. В качестве небольшого теста я поместил php-файл на сервер A, который включает файл с сервера B, я разрешил включать URL-адреса через php.ini и изменил свой пользовательский агент.

Файл на сервере B включает код для создания небольшого тестового файла, который должен быть создан на сервере A. Проблема заключается в том, что каждый раз, когда я запускаю сервер A, файл включается, создается на сервере B, когда я действительно хочу его создать на сервере А.

Код сервера А:

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

Код сервера B:

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

Ответы [ 2 ]

0 голосов
/ 06 июня 2011

В связи с тем, что вы делаете, возникает множество проблем безопасности. Хотя php очень гибок и может быть настроен на такие вещи, я бы не рекомендовал, как вы это делаете.

Существуют и другие способы заставить сервер 'a' создавать файлы на удаленном хосте 'b'.

Personnaly, мне очень нравятся функции ssh для выполнения удаленных задач относительно безопасным способом.

0 голосов
/ 06 июня 2011

На сервере B поместите следующую строку в файл .htaccess:

AddType text/plain .php

Вам необходим код , который будет выведен сервером B для чтения сервером A.В настоящий момент он обрабатывается на сервере A.

Это сделает ваш код видимым для общественности. Это также предотвратит выполнение любого другого PHP в этомкаталог.Вы можете использовать директиву <Files>, чтобы она применялась только к определенным файлам, но она всегда будет доступна для общественности.Там есть способы ограничить доступ, как в PHP, так и в .htaccess.

Если вы не хотите, чтобы это происходило, есть способы сделать это тоже, но они немного сложнее.

РЕДАКТИРОВАТЬ , чтобы ответить на запрос
Если вы все еще хотите выполнять PHP на сервере B и выборочно включать файлы, я бы предложил создать новый файл 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');

Вы также должны посмотреть на использование basename() на $_GET['file'] на сервере B, если это возможно, для повышения безопасности и hash() с помощью параметра auth.

...