защищенная информация об имени хоста php - альтернатива $ _SERVER ['HTTP_HOST'] - PullRequest
5 голосов
/ 17 февраля 2011

У меня есть общедоступный сценарий отладки, который я хотел бы запускать только на определенных устройствах разработчика, я надеялся сделать это программно внутри этого сценария, обнаружив ip или имя сервера -

Итак, у меня есть вопрос о безопасности $ _SERVER и $ _SERVER ['HTTP_HOST'], в частности.

Из этого: http://shiflett.org/blog/2006/mar/server-name-versus-http-host сообщения в блоге я понял, что эта переменная довольно небезопасна и ей нельзя доверять.

Какой самый лучший способ узнать у php, на каком ящике вы сейчас находитесь?

Я подумал об использовании FILE , так как это кажется довольно безопасным, но я не уверен, что у меня достаточно информации только из пути к файлу.

Мне не обязательно нужно имя сервера, даже ip будет в порядке.

Заранее спасибо.

Ответы [ 4 ]

2 голосов
/ 17 февраля 2011

Способ лучший ?Это зависит от уровня контроля над вашей средой.Вот некоторые варианты:

  1. Установите переменную окружения через веб-сервер, чтобы указать поле.

    if (getenv('env_server') == 'production')
    

    Это хорошо, так как нет файлов, которые вам нужныбеспокоюсь о.Только конфигурация веб-сервера.

  2. Установите файл в «известном» месте на сервере и проверьте его (один файл для всего сервера).

    require('/path/to/environment.php');
    

    Этот файл должен определять константу для определения среды.

  3. Вручную настроить каждое приложение для сервера.Это проще всего сделать, поскольку для него ничего не требуется на стороне сервера, но это также наименее удобно, поскольку вам нужно вручную настраивать каждую установку ...

  4. Внешний IPадрес, используемый для доступа к сайту:

    $_SERVER['SERVER_ADDR']

    Это хорошо, поскольку не требует дополнительной настройки на стороне сервера.Но для этого потребуется сохранить карту всех активных IP-адресов и серверов, с которыми они связаны (тем более, что более одного IP-адреса могут указывать на один и тот же сервер) ...

2 голосов
/ 17 февраля 2011

Лучший способ - явно определить компьютер, поместив в него файл конфигурации среды и проверив его:

if (file_exists('environment.php')) {
    include 'environment.php';
}

Этот файл может содержать только имя компьютера, на котором вы работаете, илипараметры конфигурации, такие как $debug = 0 или что-либо еще, что вы хотите настроить для конкретных машин.

0 голосов
/ 17 февраля 2011

Вы можете использовать exec() для запуска команды оболочки.

echo exec('hostname');

Это может получить IP-адрес в OS X, может зависеть от платформы.

echo exec('ifconfig | grep "inet " | grep -v 127.0.0.1 | cut -d\  -f2');
0 голосов
/ 17 февраля 2011

Каков наилучший способ узнать у php, на каком ящике вы сейчас находитесь?

$_SERVER["SERVER_NAME"] обычно подойдет.Проблемы безопасности, о которых говорит Крис, требуют очень, очень специфических обстоятельств для работы.

$_SERVER["SERVER_ADDR"] также будет альтернативой.

Кроме этого, я бы предпочел пойти с __FILE__, если есть шанс получить подсказку с пути.

...