È l'intestazione ('Posizione: ../page.php?param='.$param); vulnerabile ai reindirizzamenti non convalidati?

2

Ho esaminato un'applicazione web costruita su PHP. In questo modo, reindirizza a pagine diverse:

$param = $_POST['param'];
header('Location: ../page.php?param='.$param);

È vulnerabile ai reindirizzamenti non convalidati? In altre parole, posso reindirizzare a un altro sito web, manipolando il parametro param ?

    
posta hmrojas.p 25.05.2016 - 19:54
fonte

2 risposte

3

Non penso che ci sia un rischio per una vulnerabilità di reindirizzamento aperto, poiché qualsiasi cosa dopo il ? verrà interpretata come parametri di query e non come parte del percorso. Ma dovresti comunque cambiare il tuo codice, poiché non ti assicuri che param sia effettivamente codificato tramite URL. Fai ciò con urlencode() :

header('Location: ../page.php?param='.urlencode($param));

Tuttavia, se utilizzi una versione di PHP precedente alla 5.1.2, sei vulnerabile all'iniezione di intestazione (vedi documentazione ). Inviando un param che include una nuova riga un utente malintenzionato potrebbe impostare più intestazioni (o semplicemente impostare di nuovo l'intestazione della posizione, sovrascrivendo il vecchio valore). L'utilizzo di urlencode() corregge che dal momento che \n sarebbe codificato come %0A .

L'intero costrutto potrebbe non essere necessario - forse puoi controllare sia $_POST che $_GET per param in page.php ?

    
risposta data 25.05.2016 - 20:17
fonte
-1

Risposta breve: Sì.

Risposta lunga: sì, ma dipende. Non abbiamo un codice page.php , quindi possiamo solo indovinare cosa fa quella pagina in background. Tuttavia, qualsiasi parametro inviato tramite POST o GET (o qualsiasi altra richiesta in tal senso) può essere modificato per l'utilizzo finale. Quindi la manipolazione è ovviamente possibile. Maggiori informazioni su POST (HTTP) e HTTP se vuoi saperne di più.

Perché: dal frammento che hai pubblicato, possiamo vedere che non è impostata alcuna escape per il parametro POST. In questo modo, l'attaccante può impostare il parametro POST su qualsiasi valore.

Per sfruttarlo, puoi utilizzare curl o postman e impostare qualsiasi valore sul parametro $_POST['param'] .

    
risposta data 25.05.2016 - 20:17
fonte

Leggi altre domande sui tag