Supponiamo di avere un sito Web e si sta utilizzando un parametro returnUrl
URL per reindirizzare l'utente alla pagina in cui si trovava dopo l'accesso o modificare alcuni record nell'area dell'utente. Esiste un modo standard per verificare se returnUrl
si trova sullo stesso server dell'applicazione Web?
Finora ho capito che ci sono due modi in cui Atacker può reindirizzare l'utente altrove e le seguenti azioni possono essere eseguite per prevenire questi attacchi:
- L'attaccante fornisce l'intero URL nel parametro (http://evil.com/) - qui è possibile controllare se il parametro contiene
http(s)://
oftp://
- Il browser aggiunge automaticamente il protocollo se manca, in modo che l'autore dell'attacco possa fornire qualcosa come
//evil.com
o//numeric_ip_address
e reindirizzerà l'utente anche all'esterno del server - qui puoi ancora controllare se l'URL inizia con//
Esistono altri modi per codificare l'indirizzo URL? Posso essere sicuro che il parametro non possa essere utilizzato in modo errato se controllo solo i due casi precedenti?