Sono nuovo nella programmazione WebApp e sto cercando di capire le implicazioni sulla sicurezza di non convalidare i dati ottenuti chiamando il metodo di interfaccia javax.servlet.http.HttpSession.getAttribute (). So come regola generale che si dovrebbe sempre convalidare i dati ottenuti da una fonte non attendibile, ma suppongo di non capire perché i contenuti della sessione non siano attendibili. Questo si basa su ipotesi (probabilmente ingiustificate) che l'unico modo in cui i dati potrebbero essere aggiunti alla sessione sarebbe chiamando HttpSession.setAttribute () e che solo il codice fidato che rientra nell'ambito della stessa applicazione dovrebbe essere in grado di farlo .
Credo che quello che sto chiedendo veramente è come un utente malintenzionato potrebbe sfruttare la mia incapacità di eseguire una corretta convalida dei dati ottenuti da HttpSession. È perché l'implementazione è sconosciuta e non è possibile garantire che i contenuti della sessione non siano costruiti in qualche modo dai dati nella richiesta HTTP (a parte un id di sessione) e quindi soggetti a manomissioni? Oppure perché fidarsi del contenuto della sessione significa fidarsi implicitamente dell'id della sessione, che potrebbe essere compromessa e puntare alla sessione sbagliata? (Anche se ciò accada, sembra che l'autore dell'attacco debba avere qualche possibilità di creare una sessione alternativa che contenga i dati compromessi).
Supponendo che il contenuto della sessione non sia costruito a partire dai dati della richiesta, è il caso che l'unico modo in cui questa vulnerabilità possa essere sfruttata sia se esiste un'altra vulnerabilità che consentirebbe a un utente malintenzionato di creare una cattiva sessione? Per esempio. caricare il codice eseguibile e ottenere il server per eseguirlo e restituire un ID di sessione che viene catturato e riprodotto?