Questo è simile a questa domanda , ma un po 'più specifico.
TL; DR; Ci sono problemi di sicurezza nel consentire agli URL relativi forniti dall'utente nell'intestazione Location:
sul reindirizzamento?
Sfondo:
Sto scrivendo un piccolo proxy da utilizzare di fronte a CouchDB . Per autenticare l'API CouchDB, è necessario inviare un POST all'endpoint /_session
come descritto qui .
Questo endpoint accetta un parametro di query facoltativo, next
, che, quando presente, farà sì che una richiesta di autenticazione di successo risponda con 302
e un Location:
di reindirizzamento, piuttosto che un semplice 200
.
Ora CouchDB ha quello che mi sembra un'implementazione insicura di questo. Il valore next
viene semplicemente aggiunto al nome host del server (senza barra !!). Quindi una richiesta come questa:
POST /_session?next=foobar
Riceverai una risposta che include:
Location: http://someserver.comfoobar
Penso che questo sia abbastanza chiaramente negativo, ma almeno il danno è limitato solo alle richieste autenticate, quindi un phisher casuale probabilmente non può fare molto con esso. Ma mi rende ancora un po 'a disagio.
Quindi mi sembra che debba essere fatta qualche validazione. Come minimo, un /
deve essere preteso dall'URL fornito dall'utente. Ma sto pensando che un approccio più semplice potrebbe essere semplicemente convalidare che l'URL fornito dall'utente sia relativo, e quindi rispondere solo con quello.
Quindi per il mio esempio:
POST /_session?next=foobar
Risponderebbe con:
Location: /foobar
È un approccio sicuro?