Rimozione di X-Powered-By


137
  1. Come posso rimuovere l'intestazione X-Powered-By in PHP? Sono su un server Apache e utilizzo php 5.21. Non riesco a usare la funzione header_remove in php in quanto non è supportata da 5.21. Ho usato Header unset X-Powered-By, ha funzionato sul mio computer locale, ma non sul mio server di produzione.

  2. Se php non supporta header_remove () per la versione <5.3, esiste un'alternativa?


Versione PHP in produzione: PHP / 5.2.13 Versione PHP in locale: PHP / 5.2.11 Versione Apache in produzione: Apache / 2.2.15 (Unix) Versione Apache in locale: Apache 2.0.63 (usando MAMP su Mac)
Castor

Fai attenzione anche alle uova di Pasqua .
Pacerier,

Risposte:


236

Penso che sia controllato expose_phpdall'impostazione in PHP.ini :

expose_php = off

Decide se PHP può esporre il fatto che sia installato sul server (ad es. Aggiungendo la propria firma all'intestazione del server Web). Non costituisce in alcun modo una minaccia per la sicurezza, ma consente di determinare se si utilizza PHP sul proprio server o meno.

Non esiste alcun rischio diretto per la sicurezza, ma come osserva David C, esporre una versione obsoleta (e forse vulnerabile) di PHP può essere un invito per le persone a provare ad attaccarlo.


30
'Non è in alcun modo una minaccia alla sicurezza'. Questo potrebbe non essere vero per le versioni precedenti di php in esecuzione su un server ospitato. Ho sentito che gli hacker possono sfruttare "buchi" ben documentati nelle versioni precedenti. È meglio nascondere questo fatto ....
David

14
Essere "completamente aggiornato" è un imo falso positivo. È meglio disabilitare del tutto le informazioni. È possibile che una versione rilasciata ieri possa già avere una minaccia esposta e, a seconda di quanto sia aggressivo il tuo ciclo di aggiornamento, potrebbe esserlo per qualche tempo. Meglio farli indovinare del tutto. Nascondo il più possibile includendo anche le versioni di nginx.
Mike Purcell,

1
@ David, ciò che intende è che non si aggiunge alla minaccia alla sicurezza che già affronti.
Pacerier,

7
Puoi e dovresti segnalare intenzionalmente un valore errato per l'intestazione X-Powered-By. Ad esempio, se si esegue PHP, è possibile inviare un'intestazione X-Powered-By: ASP.NET come un modo per rallentare gli aggressori dall'identificazione della configurazione del software sul server Web. Invia i tuoi aggressori a caccia di un'oca selvatica per rallentare le loro scansioni.
Chaoix,

3
@Pacerier, ovviamente si aggiunge alla minaccia alla sicurezza. Hacker scansiona migliaia di siti in cerca di prede facili ... avere questa intestazione quando su una versione precedente significa che il server ora viene preso di mira quando in precedenza sarebbe stato ignorato. Aggiunge alla minaccia alla sicurezza in modo diretto. Anche tenuto aggiornato, potrebbe aggiungere alla minaccia in una breve finestra temporale in cui è presente un aggiornamento che non è stato ancora applicato.
Nigel B. Peck,


50

Se non è possibile disabilitare la direttiva expose_php per silenziare la capacità di parlare di PHP (richiede l'accesso a php.ini ), è possibile utilizzare la Headerdirettiva di Apache per rimuovere il campo dell'intestazione:

Header unset X-Powered-By

3
Non funziona sul mio server di produzione. Sta funzionando sulla mia macchina locale però. Qualche idea sul perchè questo sta succedendo?
Castor,

@Castor Quali versioni di server stai usando localmente e sulla macchina di produzione? Qualche differenza nell'impostazione di PHP?
Pekka,

Versione PHP in produzione: PHP / 5.2.13 Versione PHP in locale: PHP / 5.2.11 Versione Apache in produzione: Apache / 2.2.15 (Unix) Versione Apache in locale: Apache 2.0.63 (usando MAMP su Mac)
Castor

1
@Castor: mod_headers è disponibile su entrambi i server? E sei autorizzato a sovrascrivere FileInfo (vedi httpd.apache.org/docs/2.2/mod/core.html#allowoverride )?
Gumbo,

@Gumbo Sì, mod_headers è disponibile su entrambi i server. E sì, mi è permesso di ignorare FileInfo.
Castor,

24
if (function_exists('header_remove')) {
    header_remove('X-Powered-By'); // PHP 5.3+
} else {
    @ini_set('expose_php', 'off');
}

14

Se hai accesso a php.ini, imposta expose_php = Off.


3
Bene, ho capito che funziona dal codice php. header ("X-Powered-By:"); L'impostazione dell'intestazione X-Powered-By su nulla l'ha rimossa. Grazie a tutti per il tempo e i suggerimenti.
Castor,


4

Prova ad aggiungere una chiamata header () prima di inviare intestazioni, come:

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

indipendentemente dall'impostazione expose_php in php.ini


0

Questa soluzione ha funzionato per me :)

Aggiungi sotto la riga nello script e controlla.

Le impostazioni di livello di Ngnix / Apache ecc. Potrebbero non essere necessarie.

header("Server:");
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.