X-Powered-By entfernen

137
  1. Wie kann ich den X-Powered-By-Header in PHP entfernen? Ich bin auf einem Apache Server und ich benutze PHP 5.21. Ich kann die Funktion header_remove in PHP nicht verwenden, da sie von 5.21 nicht unterstützt wird. Ich habe den nicht gesetzten Header X-Powered-By verwendet. Er funktionierte auf meinem lokalen Computer, jedoch nicht auf meinem Produktionsserver.

  2. Wenn PHP Header_remove () für Version <5.3 nicht unterstützt, gibt es eine Alternative?

Rolle
quelle
PHP-Version in der Produktion: PHP / 5.2.13 PHP-Version in der lokalen: PHP / 5.2.11 Apache-Version in der Produktion: Apache / 2.2.15 (Unix) Apache-Version in der lokalen: Apache 2.0.63 (mit MAMP auf Mac)
Castor
Achten Sie auch auf die Ostereier .
Pacerier

Antworten:

236

Ich denke, das wird durch die expose_phpEinstellung in PHP.ini gesteuert :

expose_php = off

Legt fest, ob PHP die Tatsache offenlegen darf, dass es auf dem Server installiert ist (z. B. durch Hinzufügen seiner Signatur zum Webserver-Header). Es ist in keiner Weise eine Sicherheitsbedrohung, aber es ermöglicht festzustellen, ob Sie PHP auf Ihrem Server verwenden oder nicht.

Es gibt kein direktes Sicherheitsrisiko, aber wie David C feststellt, kann das Aufdecken einer veralteten (und möglicherweise anfälligen) Version von PHP eine Einladung für Benutzer sein, zu versuchen, es anzugreifen.

Pekka
quelle
30
"Es ist in keiner Weise eine Sicherheitsbedrohung". Dies kann für ältere Versionen von PHP, die auf einem gehosteten Server ausgeführt werden, falsch sein. Ich habe gehört, dass Hacker gut dokumentierte "Löcher" in früheren Versionen ausnutzen können. Es ist besser, diese Tatsache zu verbergen ...
David
14
"Vollständig auf dem neuesten Stand" zu sein, ist ein falsch positiver Imo. Es ist besser, die Informationen vollständig zu deaktivieren. Es ist möglich, dass eine gestern veröffentlichte Version bereits eine gefährdete Bedrohung darstellt. Je nachdem, wie aggressiv Ihr Upgrade-Zyklus ist, kann dies für einige Zeit der Fall sein. Es ist besser, sie ganz zu erraten. Ich verstecke so viel ich kann, einschließlich Nginx-Versionen.
Mike Purcell
1
@ David, Was er meint , ist es nicht hinzufügen , auf die Bedrohung der Sicherheit , dass Sie bereits Gesicht.
Pacerier
7
Sie können und sollten absichtlich einen schlechten Wert für den X-Powered-By-Header melden. Wenn Sie beispielsweise PHP ausführen, können Sie einen X-Powered-By: ASP.NET-Header senden, um Angreifer daran zu hindern, die Softwarekonfiguration auf Ihrem Webserver zu identifizieren. Schicken Sie Ihren Angreifern eine wilde Gänsejagd, um ihre Scans zu verlangsamen.
Chaoix
3
@ Pacerier, natürlich erhöht es die Sicherheitsbedrohung. Hacker durchsucht Tausende von Websites nach leichter Beute. Wenn dieser Header in einer alten Version verwendet wird, wird der Server jetzt als Ziel ausgewählt, wenn er zuvor ignoriert worden wäre. Es erhöht die Sicherheitsbedrohung auf direkte Weise. Selbst wenn Sie auf dem neuesten Stand sind, kann dies die Bedrohung in einem kurzen Zeitfenster erhöhen, in dem ein Update vorliegt, das noch nicht angewendet wurde.
Nigel B. Peck
50

Wenn Sie die Anweisung expose_php nicht deaktivieren können, um die Gesprächigkeit von PHP stummzuschalten (erfordert Zugriff auf die php.ini ), können Sie die HeaderAnweisung Apache verwenden , um das Headerfeld zu entfernen:

Header unset X-Powered-By
Gumbo
quelle
3
Das funktioniert auf meinem Produktionsserver nicht. Es funktioniert jedoch auf meinem lokalen Computer. Irgendwelche Ideen, warum dies geschieht?
Castor
@Castor Welche Serverversionen verwenden Sie lokal und auf der Produktionsmaschine? Irgendwelche Unterschiede im PHP-Setup?
Pekka
PHP-Version in der Produktion: PHP / 5.2.13 PHP-Version in der lokalen: PHP / 5.2.11 Apache-Version in der Produktion: Apache / 2.2.15 (Unix) Apache-Version in der lokalen: Apache 2.0.63 (mit MAMP auf Mac)
Castor
1
@Castor: Sind mod_headers auf beiden Servern verfügbar? Und dürfen Sie FileInfo überschreiben (siehe httpd.apache.org/docs/2.2/mod/core.html#allowoverride )?
Gumbo
@Gumbo Ja, mod_headers ist auf beiden Servern verfügbar. Und ja, ich darf FileInfo überschreiben.
Castor
24
if (function_exists('header_remove')) {
    header_remove('X-Powered-By'); // PHP 5.3+
} else {
    @ini_set('expose_php', 'off');
}
Luchaninov
quelle
14

Wenn Sie Zugriff auf php.ini haben, setzen Sie expose_php = Off.

Arseni Mourzenko
quelle
3
Nun, ich habe das durch den PHP-Code zum Laufen gebracht. Header ("X-Powered-By:"); Wenn Sie den X-Powered-By-Header auf nichts setzen, wird er entfernt. Vielen Dank für Ihre Zeit und Vorschläge.
Castor
4

Wenn Sie FastCGI verwenden, versuchen Sie:

fastcgi_hide_header X-Powered-By;
Tinus Guichelaar
quelle
4

Versuchen Sie, einen header () -Aufruf hinzuzufügen, bevor Sie Header senden, z.

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

unabhängig von der expose_php-Einstellung in der php.ini

Daniel Faure
quelle
0

Diese Lösung hat bei mir funktioniert :)

Bitte fügen Sie die folgende Zeile in das Skript ein und überprüfen Sie.

Ngnix / Apache usw. Level-Einstellungen sind möglicherweise nicht erforderlich.

header("Server:");
Gehen
quelle