Gestiamo un'applicazione web Java da un fornitore esterno in cui abbiamo accesso al codice sorgente.
L'utente è in grado di fornire un URL esterno che viene memorizzato in un database e successivamente incorporato in un sito Web generato dall'applicazione web. Solo i membri di roba possono fornire URL. L'URL è correttamente escapato e incorporato nella pagina Web come una chiamata a un servlet di reindirizzamento insieme a tre parametri:
- URL esterno
- timestamp della voce del database
- codice hash
L'hash viene calcolato dall'URL, dal timestamp e da un segreto del server. Il server secret è un GUID calcolato all'avvio.
Il servlet di reindirizzamento ricalcola l'hash e genera un errore se non corrisponde all'hash incorporato.
Lo svantaggio è che su ogni server si riavviano le modifiche segrete del server e qualsiasi hash non sarà valido. Il problema si pone con i robot di ricerca come Google o Yahoo che le code hanno scansionato gli URL attraverso i riavvii del server. Quindi, dopo aver riavviato il server, il registro degli errori è inondato di messaggi di URL esterni non validi.
Le mie domande:
- È un modello comune nelle applicazioni web?
- Quali sono i vantaggi di sicurezza dell'hash?
- È "sicuro" calcolare l'hash senza il server segreto?
- Esistono modelli di sicurezza che offrono gli stessi vantaggi di sicurezza ma che non sono suscettibili al riavvio del server?
Grazie