L'URL (Uniform Resource Locator) di un'applicazione web è il vettore che permette di indicare la risorsa richiesta. Si tratta di una stringa di caratteri ASCII stampabile che si scompone in cinque parti :
Un URL ha la seguente struttura :
| Protocollo | Password (facoltativa) | Nome del server | Porta (facoltativo se 80) |
Percorso |
| http:// | user:password@ | it.kioskea.net | :80 | /glossair/glossair.php3 |
L'URL può permettere di trasmettere dei parametri al server facendo seguire il nome del file da un punto interrogativo, in seguito dei dati in formato ASCII. Un URL è quindi una stringa di caratteri secondo il seguente formato :
http://it.kioskea.net/forum/index.php3?cat=1&page=2
Manipolando alcune parti di un URL, un pirata può portare un servizio web a consegnare delle pagine web alle quali non avrebbe accesso.
In effetti, nei siti web dinamici i parametri sono per la maggiorparte passati attraverso l'URL nella maniera seguente :
http://cible/forum/index.php3?cat=2
I dati presenti nell'URL sono creati automaticamente dal sito e al momento di una normale navigazione un utilizzatore deve solo cliccare sui link proposti dal sito web. In questo modo, se un utilizzatore modifica manualmente il parametro, potrà provare diversi valori, ad esempio :
http://cible/forum/index.php3?cat=6
Se lo sviluppatore non ha previsto questa eventualità, il pirata potrà eventualmente ottenere un accesso ad uno spazio normalmente protetto.
D'altra parte, il pirata può portare il sito a trattare un caso inaspettato, ad esempio :
http://cible/forum/index.php3?cat=***********Nel caso sopra citato, se lo sviluppatore del sito non ha previsto il caso in cui il dato è una cifra, il sito può entrare in uno stato non previsto e rivelare delle informazioni in un messaggio di errore.
Un pirata può eventualmente testare delle rubriche e delle estensioni di file alla cieca, allo scopo di trovare delle informazioni importanti. Ecco qualche esempio classico :
http://cible/admin/ http://cible/admin.cgi
http://cible/phpinfo.php3
http://cible/index.php3.bak
http://cible/.bash_history http://cible/.htaccess
Gli attacchi detti « di attraversamento di cartelle » (in inglese directory traversal o path traversal) consistono nel modificare il percorso dell'arborescenza dell'URL per forzare il server ad accedere a delle sezioni del sito non autorizzate.
In un caso classico, l'utilizzatore può essere portato a risalire progressivamente l'arborescenza, soprattutto nel caso in cui la risorsa non è accessibile, ad esempio :
http://cible/base/test/ascii.php3 http://cible/base/test/ http://cible/base/
Sui server vulnerabili, basta risalire il percorso con più stringhe del tipo « ../ » :
http://cible/../../../../repertoire/fichier
Altri attacchi più evoluti consistono nel decodificare alcuni caratteri :
http://cible/..%2F..%2F..%2Frepertoire/fichier
http://cible/..%u2216..%u2216repertoire/fichier
Numerosi siti dinamici passano il nome delle pagine da visualizzare in parametri sotto una forma simile alla seguente :
http://cible/cgi-bin/script.cgi?url=index.htm
Per quanto nessun controllo sia realizzato, è possibile per un pirata modificare l'URL manualmente per richiedere l'accesso ad una risorsa del sito alla quale non ha accesso diretto, ad esempio :
http://cible/cgi-bin/script.cgi?url=script.cgi
Per mettere in sicurezza un server web dagli attacchi da manipolazione d'URL, è necessario effettuare una sorveglianza sulle vulnerabilità e applicare regolarmente le correzioni fornite dallo sviluppatore del server web.
D'altra parte, una configurazione minuziosa del server web permette di evitare ad un utilizzatore di navigare su pagine alle quali normalmente non avrebbe accesso. Il server web deve quindi essere configurato seguendo le consegne qui sotto :