Видалення X-Powered-By


137
  1. Як я можу видалити заголовок X-Powered-By в PHP? Я на сервері Apache і використовую php 5.21. Я не можу використовувати функцію header_remove у php, оскільки вона не підтримується 5.21. Я використовував заголовку 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

Відповіді:


236

Я думаю, що це контролюється expose_phpналаштуваннями в PHP.ini :

expose_php = off

Вирішує, чи може PHP викрити факт встановлення на сервері (наприклад, додавши свій підпис до заголовка веб-сервера). Це жодна загроза безпеці, але це дозволяє визначити, використовуєте ви PHP на своєму сервері чи ні.

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


30
"Це жодна загроза безпеці". Це може бути неправдивим для старих версій php, що працюють на розміщеному сервері. Я чув, що хакери можуть використовувати добре задокументовані «дірки» в минулих версіях. Краще приховати цей факт ....
Давид

14
Бути "повністю в курсі сучасних даних" - помилковий позитивний ефект. Краще взагалі відключити інформацію. Можливо, що версія, випущена вчора, вже може мати небезпеку, і залежно від того, наскільки агресивним є ваш цикл оновлення, може бути деякий час. Краще, щоб вони взагалі здогадувались. Я ховаю стільки, скільки можу, включаючи і версії nginx.
Майк Перселл

1
@David, що він має на увазі, це не додає до загрози безпеці, з якою ви вже стикаєтесь.
Pacerier

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

3
@Pacerier, звичайно, це додає загрозі безпеці. Хакер сканує 1000 сайтів, які шукають легку здобич ... маючи цей заголовок, коли на старій версії, це означає, що сервер зараз націлений, коли раніше його ігнорували. Це додає до загрози безпеці прямим способом. Навіть будуючи в курсі, це може призвести до загрози за коротке вікно часу, коли є оновлення, яке ще не застосовано.
Найджел Б. Пек


50

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

Header unset X-Powered-By

3
Це не працює на моєму виробничому сервері. Хоча це працює на моїй локальній машині. Будь-які ідеї, чому це відбувається?
Кастор

@Castor Які версії сервера ви використовуєте локально і на виробничій машині? Будь-які відмінності в налаштуванні PHP?
Pekka

Версія 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

@Gumbo Так, mod_headers доступний на обох серверах. І так, мені дозволяється перекрити FileInfo.
Кастор


14

Якщо у вас є доступ до php.ini, встановіть expose_php = Off.


3
Ну, я це працюю з PHP-коду. заголовок ("X-Powered-By:"); Встановлення заголовка X-Powered-By нічого не видаляло. Дякуємо всім за ваш час та пропозиції.
Кастор


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.