Per la documentazione , $_SERVER['HTTP_HOST']
viene popolata sulla base di Host
intestazione inviata dal cliente. Probabilmente dovresti iniziare a preoccuparti a questo punto, perché non è mai una buona idea fidarsi dei dati che potrebbero essere forniti da un client malevolo.
C'è anche SERVER_NAME
, che fornisce un risultato simile ma leggermente diverso. Puoi trovare una buona discussione su questi due e sui modi appropriati per utilizzarli in questa domanda di overflow dello stack .
Ora, quali attacchi potrebbero eseguire qualcuno tramite la manipolazione del tuo nome host? Dipende dalla tua app. Forse stai memorizzando nella cache una pagina renderizzata e pubblicandola con un altro utente, e quella pagina è stata generata con Host: mymaliciousserver.com
, quindi ora il tuo secondo utente fa clic sui link al server dell'attaccante, dove visualizzano i dettagli dell'account. Ci sono un numero qualsiasi di vulnerabilità possibili, e piuttosto che provare a correggerle tutte, preferisco semplicemente evitare il problema completamente.
È anche un codice alquanto discutibile - aggiunge molta complessità per qualcosa che non cambia spesso. Se è la tua app personalizzata, imposta il nome host una sola volta e fallo con esso; se si tratta di un'app distribuibile, chiedere al cliente di impostare il nome host una sola volta e di eseguirla. Stai aggiungendo parti mobili e magia, e quelle tendono ad avere problemi di sicurezza e prestazioni scarse in ambienti per cui non hai esplicitamente progettato (per esempio siti dietro un proxy inverso, siti ospitati su una porta non standard, siti eseguiti in un ambiente multi-sito, ecc.).