Подтвердить что ты не робот

Скрытие заголовка PHP X-Powered-By

Я знаю в PHP, он отправляет заголовок X-Powered-By, чтобы иметь версию PHP.

Я также знаю, добавляя некоторые контрольные суммы, вы можете получить доступ к кредитам PHP и некоторым случайным изображениям (подробнее здесь).

Я также знаю, что в php.ini вы можете повернуть expose_php = off.

Но вот что я сделал на нескольких сайтах, и это использование

header('X-Powered-By: Alex');

Когда я просматриваю заголовки, я вижу, что теперь это "Алекс", а не версия PHP. Мой вопрос заключается в следующем: сначала он отправит предыдущий заголовок PHP (до того, как он достигнет моего header(), и будет ли он обнаружен какой-либо программой-снифером? Или собраны заголовки "PHP" перед отправкой обратно в браузер?

Кстати, это не для безопасности по неизвестности, просто любопытно, как заголовки работают в PHP.

4b9b3361

Ответ 1

В PHP заголовки не отправляются до тех пор, пока PHP не встретит свой первый оператор вывода.

Это включает в себя что угодно до первого <?php.

Вот почему setcookie отправляет предупреждение, если вы пытаетесь использовать его после того, как что-то было выведено:

Предупреждение: невозможно изменить заголовок информация - заголовки, уже отправленные (выход начался с /path/to/php/file.php:100) в /path/to/php/file.php в строке 150

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

Ответ 2

Вы можете установить expose_php = Off в свой php.ini, если вы не хотите, чтобы он отправлял заголовок X-Powered-By.

Сначала PHP компилирует все (включая заголовки, какие значения), а затем запускает вывод, а не наоборот.

PHP также обнаруживается со своими собственными пасхальными яйцами, вы можете прочитать здесь эту тему: PHP Easter Eggs

Ответ 3

См. Советы и хитрости Apache: скрыть версию PHP (X-Powered-By)

Ups... Как мы видим, PHP добавляет собственные баннер:

X-Powered-By: PHP/5.1.2-1+b1…

Давайте посмотрим, как мы можем его отключить. В чтобы не подвергать PHP факт, что он установлен на сервера, добавив свою подпись к заголовок веб-сервера, который нам нужно найти в php.ini переменная expose_php и повернуть ее off.

По умолчанию для параметра expose_php установлено значение Вкл.

В php.ini(на основе вашего Linux это можно найти в в разных местах, например /etc/php.ini, /etc/php 5/apache2/php.ini и т.д.) найдите строку, содержащую expose_php On, и установите для нее значение "Выкл.":

expose_php = Off

После этого изменения PHP не будет дольше добавить свою подпись в Интернет сервер. Сделав это, не делает ваш сервер более безопасным... он просто предотвратит удаленные хосты легко увидеть, что у вас установлен PHP в системе и какая версия вы работает.

Ответ 4

Заголовки "собираются" PHP перед отправкой обратно в браузер, так что вы можете переопределять такие вещи, как заголовок состояния. Чтобы проверить это, перейдите в командную строку и введите:

telnet www.yoursite.com 80
GET /index.php HTTP/1.1
[ENTER]
[ENTER]

И вы увидите заголовки, отправленные в ответ (замените/index.php URL-адресом вашей страницы PHP после домена.)

Ответ 5

Чтобы избавиться от заголовка X-Powered-By без доступа к php.ini, просто добавьте пустой заголовок.

<?php header('X-Powered-By:'); ?>

Это перезаписывает заголовок X-Powered-By по умолчанию с пустым значением, хотя большинство клиентов и приложений действуют так, как будто этот заголовок не был отправлен вообще.

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

И чтобы ответить на ваш вопрос:

Будет отправлен только ваш заголовок X-Powered-By, потому что он будет заменен вашим заголовком с тем же именем. Поэтому он не может быть обнаружен "сниффером".

Ответ 6

Мой вопрос: сначала он отправит предыдущий заголовок PHP (до того, как он достигнет моего header(), и будет ли он обнаружен какой-либо программой-снифером? Или собраны заголовки "PHP" перед отправкой обратно в браузер?

Нет, он сначала не отправляет предыдущий заголовок PHP. Заголовки отправляются или не отправляются (полностью, как одна партия) в PHP. По умолчанию ваш вызов header Docs заменяет предыдущий заголовок с тем же именем (если вы не укажете что-то другое с второй параметр).

Примечание: Если PHP не будет собирать заголовки, он не сможет его заменить.

Поскольку он не отправляется ранее, он не обнаруживается с помощью программы-сниффера.

Итак, заголовки собраны PHP и отправляются в тот момент, когда начинается "настоящий" вывод (тело ответа HTTP).

См. также headers_sent Документы.