Questa generazione di URL del progetto è sicura?

1

Nei procedimenti di risposta della mia domanda ho trovato un modo per generare un URL del progetto indipendentemente dal percorso del progetto in Document root.

Se in un file nella radice del progetto definisco quanto segue:

define(PROJECT_URL,
       '//'.$_SERVER['HTTP_HOST'].
       substr(__DIR__, strlen($_SERVER['DOCUMENT_ROOT']))
);

Ricevo un URL statico utile e funzionerà se sposto il progetto altrove.

Tuttavia, poiché sono abbastanza alle prime armi con i server e le applicazioni Web, mi chiedo se questo approccio abbia qualche vulnerabilità di sicurezza sfruttabile.

    
posta Mini Fridge 25.10.2016 - 18:37
fonte

1 risposta

1

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.).

    
risposta data 25.10.2016 - 22:54
fonte

Leggi altre domande sui tag