Intereting Posts
Facebook API API и PHP SDK вопросы Что делает session_register_shutdown? Загрузка классов с именами с автозагрузчиком Symfony 1.4? Ошибка при отправке электронной почты с помощью phpmailer – Ошибка при передаче SMTP-сообщений: данные не принимаются Mysql Никакое соединение не может быть сделано, потому что целевая машина активно отказалась от него Создание и настройка приложений Facebook через API Удаление значений из сеанса PHP Могу ли я индексировать массив javascript для соответствия набору результатов php-переменных PHP, передающий переменную с перенаправлением заголовка Возможно ли, что выражение в объявлении массива … возможно? Форма обратной связи PHP и HTML Как я могу заставить PHP создавать обратную трассировку при ошибках? Цитирование флагов в php при отправке в базу данных Рекурсивный цикл для многомерных матриц? Загрузить изображение на веб-сервер PHP из iOS

Скрытие заголовка 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.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

 expose_php = Off 

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

См. Также headers_sent Docs .