использовать внешний файл класса из родительского домена на поддомен - PullRequest
0 голосов
/ 11 августа 2011

как я могу включить файл класса из моего родительского домена для использования в поддомене на моем сервере?

например, у меня есть файл класса, который обрабатывает аутентификацию пользователя вместе с некоторыми важными методами. Как я могу использовать этот класс аутентификации на поддомене?

моя структура папок

родительский домен

/home/<domain>/public_html/

субдомен

/home/<domain>/public_html/users/cluster_1/<sub>

Когда я создаю новый поддомен, у меня есть шаблон index.php, который копируется в

/home/<domain>/public_html/users/cluster_1/<sub>/index.php

в index.php я хочу включить свой класс аутентификации, чтобы я мог делать еще кое-что на основе данных, возвращаемых его методами.

я знаю, что не могу включить запросы http, а также я не хочу использовать dirname(dirname(__FILE__), потому что, если пользователь изменяет это, он может видеть структуру папок сервера для домена.

Я попробовал fopen, но не смог включить это в мой класс, а также я попробовал cURL, подобный этому

function get_data($url) {
    $ch = curl_init();
    $timeout = 5;
    curl_setopt($ch,CURLOPT_URL,$url);
    curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
    curl_setopt($ch,CURLOPT_CONNECTTIMEOUT,$timeout);
    $data = curl_exec($ch);
    curl_close($ch);
    return $data;
}
$returned_content = get_data('http://domain.com/api/ApiClient.php');

есть элегантный способ включить мой файл класса ApiClient.php, и даже если пользователь изменяет код PHP, чтобы он не видел информацию о структуре папок, которая выдается ошибками PHP.

1 Ответ

0 голосов
/ 11 августа 2011

Извините, нет, не совсем.

Хотя на самом деле можно было бы загрузить код PHP через HTTP и запустить его локально, это сильно не рекомендуется из-за последствий для безопасности: одинмаленькая ошибка в вашей включающей системе или одна маленькая ошибка в кодовом сервере, и вдруг вы запускаете вредоносный код из непроверенного источника.Есть веская причина, почему они отключают это поведение по умолчанию.

Если ваши пользователи могут редактировать и запускать свой собственный (непроверенный) код PHP, нет смысла сомневаться в том, что ваши пользователи видят вашу структуру каталогов: если вы не обеспечили безопасность своей установки (что не похоже), онимог бы узнать эту структуру прямо сейчас.Просто используя соответствующие функции для обхода каталогов.

Я бы просто использовал подход прямого включения.

require MAIN_CLASS_PATH . '/api/ApiClient.php';

Если вы действительно хотите, чтобы они не знали о родительском домене:

  • Переместите общие классы в отдельный проект и, следовательно, в отдельный каталог (скажем, / home /$ user / shared / api
  • Защита поддоменов путем установки PHP open_basedir и отключения таких функций, как exec () (которые могут использоваться для обхода open_basedir)
  • Включить из / home / $ user / shared/ api как из родительского домена, так и из субдомена.
...