Usuwanie X-Powered-By

137
  1. Jak mogę usunąć nagłówek X-Powered-By w PHP? Jestem na serwerze Apache i używam php 5.21. Nie mogę użyć funkcji header_remove w php, ponieważ nie jest ona obsługiwana przez 5.21. Użyłem Header unset X-Powered-By, działał na mojej lokalnej maszynie, ale nie na moim serwerze produkcyjnym.

  2. Jeśli php nie obsługuje funkcji header_remove () dla wersji <5.3, czy istnieje alternatywa?

Rolka
źródło
Wersja PHP na produkcji: PHP / 5.2.13 Wersja PHP na lokalnym: PHP / 5.2.11 Wersja Apache na produkcji: Apache / 2.2.15 (Unix) Wersja Apache na lokalnym: Apache 2.0.63 (przy użyciu MAMP na Mac)
Castor
Uważaj też na pisanki .
Pacerier,

Odpowiedzi:

236

Myślę, że jest to kontrolowane przez expose_phpustawienie w PHP.ini :

expose_php = off

Decyduje, czy PHP może ujawniać fakt, że jest zainstalowane na serwerze (np. Poprzez dodanie swojego podpisu do nagłówka serwera WWW). Nie stanowi żadnego zagrożenia dla bezpieczeństwa, ale pozwala określić, czy używasz PHP na swoim serwerze, czy nie.

Nie ma bezpośredniego zagrożenia bezpieczeństwa, ale jak zauważa David C, ujawnienie przestarzałej (i prawdopodobnie podatnej na ataki) wersji PHP może być zaproszeniem do próby jej zaatakowania.

Pekka
źródło
30
„Nie stanowi żadnego zagrożenia dla bezpieczeństwa”. Może to być nieprawdą w przypadku starszych wersji php działających na serwerze hostowanym. Słyszałem, że hakerzy mogą wykorzystywać dobrze udokumentowane „dziury” w poprzednich wersjach. Lepiej ukryć ten fakt ...
David
14
Bycie „w pełni aktualnym” jest fałszywie pozytywnym imo. Lepiej całkowicie wyłączyć informacje. Możliwe, że wersja wydana wczoraj może już mieć narażone zagrożenie iw zależności od tego, jak agresywny jest twój cykl aktualizacji, może tak być przez jakiś czas. Lepiej, żeby w ogóle zgadywali. Ukrywam tyle, ile mogę, w tym również wersje nginx.
Mike Purcell
1
@David, ma na myśli to, że nie zwiększa to zagrożenia bezpieczeństwa, z którym już się spotykasz .
Pacerier,
7
Możesz i powinieneś celowo zgłaszać złą wartość nagłówka X-Powered-By. Na przykład, jeśli używasz PHP, możesz wysłać nagłówek X-Powered-By: ASP.NET, aby spowolnić atakujących przed identyfikacją konfiguracji oprogramowania na Twoim serwerze internetowym. Wyślij napastników na dziką gęś, aby spowolnić ich skanowanie.
Chaoix
3
@Pacerier, oczywiście, zwiększa zagrożenie bezpieczeństwa. Haker skanuje tysiące witryn w poszukiwaniu łatwej zdobyczy ... posiadanie tego nagłówka w starej wersji oznacza, że ​​serwer jest teraz celem, gdy wcześniej byłby ignorowany. W bezpośredni sposób zwiększa zagrożenie bezpieczeństwa. Nawet będąc na bieżąco, może zwiększyć zagrożenie w krótkim czasie, gdy pojawi się aktualizacja, która nie została jeszcze zastosowana.
Nigel B. Peck
50

Jeśli nie możesz wyłączyć dyrektywy expose_php, aby wyciszyć gadatliwość PHP (wymaga dostępu do php.ini ), możesz użyć dyrektywy Apache,Header aby usunąć pole nagłówka:

Header unset X-Powered-By
Gumbo
źródło
3
To nie działa na moim serwerze produkcyjnym. Jednak działa na moim komputerze lokalnym. Jakieś pomysły, dlaczego tak się dzieje?
Castor
@Castor Z jakich wersji serwera korzystasz lokalnie i na maszynie produkcyjnej? Jakieś różnice w konfiguracji PHP?
Pekka,
Wersja PHP na produkcji: PHP / 5.2.13 Wersja PHP na lokalnym: PHP / 5.2.11 Wersja Apache na produkcji: Apache / 2.2.15 (Unix) Wersja Apache na lokalnym: Apache 2.0.63 (przy użyciu MAMP na Mac)
Castor
1
@Castor: Czy mod_headers jest dostępny na obu serwerach? Czy możesz zastąpić FileInfo (zobacz httpd.apache.org/docs/2.2/mod/core.html#allowoverride )?
Gumbo
@Gumbo Tak, mod_headers jest dostępne na obu serwerach. I tak, mogę zastąpić FileInfo.
Castor
24
if (function_exists('header_remove')) {
    header_remove('X-Powered-By'); // PHP 5.3+
} else {
    @ini_set('expose_php', 'off');
}
luchaninov
źródło
14

Jeśli masz dostęp do php.ini, ustaw expose_php = Off.

Arseni Mourzenko
źródło
3
Cóż, mam to działające z kodu PHP. nagłówek („X-Powered-By:”); Ustawienie nagłówka X-Powered-By na nic go usunęło. Dziękuję wszystkim za poświęcony czas i sugestie.
Castor
4

Jeśli używasz FastCGI, spróbuj:

fastcgi_hide_header X-Powered-By;
Tinus Guichelaar
źródło
4

Spróbuj dodać wywołanie header () przed wysłaniem nagłówków, na przykład:

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

niezależnie od ustawienia expose_php w php.ini

Daniel Faure
źródło
0

To rozwiązanie zadziałało u mnie :)

Dodaj poniższą linię do skryptu i sprawdź.

Ustawienia poziomu Ngnix / Apache itp. Mogą nie być wymagane.

header("Server:");
Spacerować
źródło