![]()
Le form e l' autorizzazione degli script CGI sono
probabilmente il piu' importante rischio per un server
web. Infatti gli script CGI sono programmi che GIRANO sul
tuo server. Il problema e': quando la CGI accetta l'
input di un utente, e lo script non controlla le
informazioni ricevute, beh, quelle informazioni
potrebbero trasformarsi in pericolosi COMANDI, ed il
server li eseguira! Percio' attenzione ai CGI liberamente
disponibili sulla rete. Prima di installare un nuovo
script CGI che non conosci, dovresti controllarlo.
Ricorda queste regole:
Ma vediamo che tipo di rischi si corrono in seguito di attacchi di utenti malintenzionati:
Sendmail e PerlOk, supponi di voler sviluppare un servizio basato su script CGI, con il quale gli utenti possono accedere ad un database ed effettuare delle ricerche per poi ricevere i risultati via email (ad esempio i nuovi libri arrivati nella tua libreria e disponibili per consultazioni). Al fine di raggiungere questo scopo devi costruire questo comando: sendmail -t utente@indirizzo.com </.nuoviarrivi Il comando qui sopra invia il file 'nuoviarrivi' all' indirizzo email dell' utente specificato (per esempio 'utente@indirizzo.com'). Cosi' costruisci una form con un campo di input dove l' utente puo' specificare il suo indirizzo. Bene, il problema e': se il tuo script non controlla l' input degli utenti, un utente malintenzionato potrebbe compilare la tua form in questo modo: utente@indirizzo.com </etc/passwd; Cosa e' successo? Bene, prima di tutto devi sapere una cosa: il file passwd e' il file piu' ambito ed agognato per gli utenti malintenzionati, infatti contiene tutti gli userid e le password...di tutti gli utenti che hanno un account sull' host dove gira il server...Percio' cosa e' successo? E' semplice: l' utente malintenzionato sta chiedendo al tuo server: 'per favore, invia il file delle password al mio indirizzo...grazie...'. ma come e' possibile? Il tuo script invia solamente della posta agli indirizzi specificati...Certo, ma il tuo script 'legge' l' input dell' utente e lo considera un indirizzo email. L' interprete Perl sa che ';' significa la fine di un comando, cosi capisce che deve eseguire 2 comandi. Il comando originario diventa: sendmail -t utente@indirizzo.com </etc/passwd; </.nuoviarrivi E l' interprete Perl eseguira':
Ovviamente il secondo comando produrra' un errore, ma il primo verra' eseguito! Chiamate alla shell UnixL' interprete Perl o anche il linguaggio C, hanno delle funzioni che consentono di effettuare delle chiamate di sistema. In altre parole il tuo script potrebbe eseguire qualsiasi comando tramite alcune funzioni particolari, come system(), popen() od eval(). Usa la funzione Perl exec invece di system(). Come posso evitare questi problemi?Controlla l' input degli utenti. Dovresti ammettere solo cifre e lettere e piazzare un bel '\' prima di qualsiasi carattere 'strano'. Per esempio: il simbolo '<' permette la redirezione dell' output, percio' in un sistema Unix e' un carattere speciale. Comunque se inserisci un '\' prima, diventa il comune simbolo minore (cioe', significa 'minore di'). Evita le funzioni 'eval', 'popen()' e 'system()'. Non permettere le chiamate alla shell Unix. Non installare script CGI troppo voluminosi (specie se sconosciuti. Infatti maggiori sono le dimensioni di un programma maggiore e' il numero di 'bug' contenuti al suo interno). Non installare assolutamente script CGI sconosciuti (controllali prima). Evita assolutamente la generazione automatica di programmi (come puoi controllare qualcosa che non esiste ancora?). |
![]()
| <<<indietro | Home | CGI | avanti >>> |
Copyright © 1998-99 M. Silvestri