Удаление 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
25
if (function_exists('header_remove')) {
    header_remove('X-Powered-By'); // PHP 5.3+
} else {
    @ini_set('expose_php', 'off');
}
Лучанинов
источник
14

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

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

Если вы используете FastCGI, попробуйте:

fastcgi_hide_header X-Powered-By;
Тинус Гичелаар
источник
4

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

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

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

Даниэль Фор
источник
0

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

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

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

header("Server:");
Ходить
источник