È sicuro inserire le stringhe user-conrolled in un'intestazione Location HTTP?

3

Sto pensando di aggiungere l'abbreviazione URL al mio sito.

Supponiamo che il mio database abbia già memorizzato url come stringa semplice, che questi dati sono stati forniti dall'utente ed è arbitrario.

Quindi un'implementazione ingenua in PHP potrebbe sembrare un po 'come questa

$url = lookup_url ($_POST['url_id']);
if (null !== $url)
{
     header ("Location: ".encode_url($url));
     exit ();
}

con un opportuno encode_url per garantire i dati forniti dall'utente sono limitati all'intestazione Location e non perdono nel resto della risposta HTTP o vengono iniettati nel database o in altro modo.

Ci sono vulnerabilità di sicurezza nel fare un reindirizzamento a un URL arbitrario fornito dall'utente?

EDIT per chiarire, in risposta all'osservazione sensibile di @ UTF-8 - supponiamo che l'utente non interagisca direttamente con la pagina a cui sono reindirizzati. Un utente malintenzionato può violare la mia sicurezza se l'utente segue il collegamento e non fa altro?

    
posta spraff 15.10.2016 - 16:48
fonte

1 risposta

2

No, non è sicuro. È pericoloso.

Un phisher può inviare un'email ai tuoi utenti e fare clic su un link che porta a https://yourwebsite.com/something/something/script.php?someVariable=doesntMatterBecaucseItWontBeRead&someOtherVariable=onlyDesignedToMakeTheUrlLonger&url=https%3A%2F%2Fyourwebsitec.om%2Fsomethinng%2Fsomething%2Fi%2Fdont%2Fcare

Gli utenti non leggeranno né capiranno quell'URL. Danno solo una rapida occhiata - nel migliore dei casi - e vedono che porta a https://yourwebsite.com , quindi tutto è buono nelle loro opinioni. Quindi, c'è un sacco di ripieni a cui nessuno importa. Alla fine, la variabile get url è definita, a partire da https%3A%2F%2Fyourwebsitec.om che è codificata url e quando decodificata è https://yourwebsitec.om . Si noti che il finale TLD è .om , non .com . .om è il termine TLD per Oman e utilizzato molto per il phishing (o almeno è la mia impressione personale).

Il phisher può semplicemente fare in modo che il sito web venga reindirizzato all'utente per assomigliare al tuo e quindi ottenere le informazioni di accesso o altri dati personali da loro.

    
risposta data 15.10.2016 - 23:22
fonte

Leggi altre domande sui tag