Удаление X-Powered-By


140
  1. Как удалить заголовок X-Powered-By в PHP? Я использую сервер Apache и использую php 5.21. Я не могу использовать функцию header_remove в php, поскольку она не поддерживается 5.21. Я использовал Header unset X-Powered-By, он работал на моем локальном компьютере, но не на моем производственном сервере.

  2. Если php не поддерживает header_remove () для версии <5.3, есть ли альтернатива?


Версия PHP на производстве: PHP / 5.2.13 Версия PHP на локальном компьютере: PHP / 5.2.11 Версия Apache на производстве: Apache / 2.2.15 (Unix) Версия Apache на локальном компьютере: Apache 2.0.63 (с использованием MAMP на Mac)
Castor

Также обратите внимание на пасхальные яйца .
Pacerier

Ответы:


240

Я думаю, что это контролируется expose_phpнастройкой в PHP.ini :

expose_php = off

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

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


32
«Это ни в коем случае не представляет угрозы безопасности». Это может быть неверно для более старых версий php, запущенных на размещенном сервере. Я слышал, что хакеры могут использовать хорошо задокументированные «дыры» в прошлых версиях. Лучше скрыть этот факт ....
Дэвид

14
Быть «полностью обновленным» - это ложный положительный результат. Лучше вообще отключить информацию. Возможно, что версия, выпущенная вчера, уже могла иметь открытую угрозу, и, в зависимости от того, насколько агрессивен ваш цикл обновления, может быть таковой в течение некоторого времени. Лучше держать их в догадках. Я скрываю все, что могу, включая версии nginx.
Майк Перселл

2
@David, он имеет в виду, что это не увеличивает угрозу безопасности, с которой вы уже сталкиваетесь.
Pacerier

7
Вы можете и должны целенаправленно сообщать о неверном значении заголовка X-Powered-By. Например, если вы используете PHP, вы можете отправить заголовок X-Powered-By: ASP.NET как способ замедлить злоумышленников от идентификации конфигурации программного обеспечения на вашем веб-сервере. Отправьте нападавших в погоню за дикими гусями, чтобы замедлить сканирование.
Chaoix

3
@Pacerier, конечно, добавляет угрозы безопасности. Хакер сканирует тысячи сайтов в поисках легкой добычи ... наличие этого заголовка в старой версии означает, что сервер теперь становится целью, тогда как раньше он игнорировался. Это напрямую увеличивает угрозу безопасности. Даже будучи в курсе последних событий, он может усугубить угрозу за короткий промежуток времени, когда есть еще не примененное обновление.
Найджел Б. Пек


52

Если вы не можете отключить директиву expose_php для отключения болтливости PHP (требуется доступ к php.ini ), вы можете использовать директиву ApacheHeader для удаления поля заголовка:

Header unset X-Powered-By

3
Это не работает на моем производственном сервере. Однако он работает на моей локальной машине. Есть идеи относительно того, почему это происходит?
Castor

@Castor Какие версии серверов вы используете локально и на производственной машине? Есть ли отличия в настройке PHP?
Пекка

Версия PHP на производстве: PHP / 5.2.13 Версия PHP на локальном компьютере: PHP / 5.2.11 Версия Apache на производстве: Apache / 2.2.15 (Unix) Версия Apache на локальном компьютере: Apache 2.0.63 (с использованием MAMP на Mac)
Castor

1
@Castor: Доступны ли mod_headers на обоих серверах? И можно ли переопределить FileInfo (см. Httpd.apache.org/docs/2.2/mod/core.html#allowoverride )?
Гамбо

@Gumbo Да, mod_headers доступен на обоих серверах. И да, мне разрешено переопределить FileInfo.
Castor


14

Если у вас есть доступ к php.ini, установите expose_php = Off.


3
Ну, у меня это работает из кода php. заголовок ("X-Powered-By:"); Установка заголовка X-Powered-By на ничего не удалила его. Спасибо всем за ваше время и предложения.
Castor


4

Попробуйте добавить вызов header () перед отправкой заголовков, например:

header('X-Powered-By: Our company\'s development team');

независимо от настройки expose_php в php.ini


0

Это решение сработало для меня :)

Пожалуйста, добавьте строку ниже в скрипт и проверьте.

Настройки уровня Ngnix / Apache и т. Д. Могут не потребоваться.

header("Server:");
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.