|
Tutte le cose che ora si credono antichissime
furono nuove
|
|
| Home Page |
|
| Articoli |
|
| News |
|
| Forum |
|
| Classi |
|
|
|
|
|
Miglioramento della sicurezza di pagine JSP
By
Roberto Colmegna
8 febbraio 2005
|
 |
|
Si fa espresso divieto d’utilizzare i contenuti di questo documento per effettuare attacchi informatici. Le informazioni espresse sono usabili SOLO per aumentare la sicurezza applicativa. In qualsiasi caso l’autore NON SI ASSUME ALCUNA RESPONSABILITA’ derivante dall’uso improprio, da parte di chiunque, delle informazioni qui espresse.
|
|
|
JSP … un poco più sicure?
|
top
|
|
Navigando s’incontrano spesso liste di link, generate in automatico da pagine JSP in funzione dei contenuti d’un DB, che permettono di vedere ed anche modificare i contenuti stessi. Uno dei più classici link d’una lista è qualcosa del tipo: <A HREF="modif.jsp?idRec=123">modifica il record con id 123</A> oppure del tipo: <A HREF="rimuovi.jsp?idRec=123">rimuovi il record con id 123</A> Per quanto certamente funzionali allo scopo i due link hanno un, subdolo, difetti: sono pericolosissimi! Immaginiamo di mostrare, ad un utente loggato, una pagina HTML con i soli link ai record a lui accessibili. Supponiamo i record dell’utente siano solo quelli che abbiano gli ID: 1000,1010,1011,1100,1111. Supponendo che i link di cancellazione siano scritti come quello visto sopra, ogni link avrà, dunque, un valore diverso al parametro “idRec”. Supponiamo ora che l’utente, “sorvolando” uno dei cinque link, s’accorga che il browser lo informa che, cliccandoci, effettuerà la chiamata: http://miosrv/mia_app/rimuovi.jsp?idRec=1000 Il nostro utente, però, è un tipo intraprendente, e prova a scrivere il link che vede nella barra degli indirizzi, mutandolo in: http://miosrv/mia_app/rimuovi.jsp?idRec=2123 Supponendo che la pagina “rimuovi.jsp” si “fidi” di quanto arriva dal client, provvederà ad eliminare il record con ID=2123 senza batter ciglio! Come? Sento qualcuno dire “… e allora? Ha funzionato, qual è il problema?” … forse che il record con ID 2123 non apparteneva a quelle elencati tra quelli appartenenti all’utente loggato?!?!? Sconcertante, vero? Si parla tanto di patching ai sistemi, di buffer overflow, di DoS, di DDoS, d’SQL injection ed invece si scopre che si può svuotare una intera tabella d’un DB, avendo i soli privilegi di poterne cancellare qualcuno e sfruttando una grave mancanza di sicurezza applicativa !!!
|
|
Come porre rimedio?
|
top
|
|
Controllando i parametri ricevuti Controllare, su ogni pagina che riceva un ID, che appartenga all’utente loggato. Questa soluzione, tuttavia, aumenta di parecchio la complessità del codice ed appesantisce i tempi esecuzionali. Criptando i parametri Criptando i valori degli “idRec” ,inseriti nel codice HTML, inviato al client e decriptandoli alla ricezione, Questa soluzione porta alla generazione di parametri HTTP parecchio lunghi, se si utilizzano algoritmi di criptazione “sicuri”. Esponendo riferimenti indiretti Consiste nel creare delle “bolle” (contesti) di metodi e parametri per attivarli, memorizzate in appositi array nella sessione utente sul server, ed inviando al client link che contengono indici a queste “bolle”. Questa soluzione utilizza parecchia memoria sul server ma minimizza le informazioni esposte al client. Agevola, inoltre, la gestione degli eventi http.
|
|
|

Eccetto dove diversamente specificato, i contenuti di questo sito sono rilasciati sotto licenza Creative Commons
|
|
|