Prima di iniziare l'analisi di un'applicazione Web vediamo brevemente di introdurre alcuni concetti teorici che saranno utili per il nostro lavoro.
Il protocollo http
L' Hyper Text Tranfer Protocol (HTTP) è un semplice protocollo su quale lavora il Web. Nato inizialmente per restituire semplici risorse di testo, si è poi sviluppato in varie direzioni.
Ogni Web browser implementa questo protocollo per scambiare informazioni con il server. Questo protocollo utilizza un modello in cui un client effettua una richiesta e il server restituisce una risposta. Il protocollo Http è un protocollo senza stato (stateless): la connessione viene chiusa una volta terminata lo scambio richiesta/risposta e non vengono mantenuti dati di sessione o altro.
I messaggi HTTP consistono in uno o più intestazioni in linee separate:
HTTP Request
È la richiesta di informazioni che parte dal nostro browser verso il Web Server.
GET /books/search.aspx?query=23k9j HTTP/1.1 Accept: image/gif, image/xxbitmap, image/jpeg, image/pjpeg, Accept-Language: en-gb,en-us;q=0.5 Referer: http://miaapplicazione.miosito.com/books/default.aspx User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1) Host: miosito.com Cookie: lang=it; XSESSIONID=sklk87979HHIhhkhJKNAH8768983
La prima linea indica il metodo (GET) seguito dall'Url della risorsa richiesta e dalla versione del protocollo utilizzata. La linea successiva indica le tipologie di file accettati seguito da una linea con le lingue accettate.
Altre informazioni interessanti sono il Referer ovvero l'URL da cui è partita la richiesta, lo user agent che fornisce informazioni su browser in uso, l'host che specifica l'host name (il nome del sito , non presente nella prima riga), l'header cookie che contiene parametri addizionali che il client fornisce al server.
HTTP Response
È la risposta che il Web Server invia al nostro browser.
HTTP/1.1 200 OK Date: Sat, 19 May 2007 13:49:37 GMT Server: IBM_HTTP_SERVER/1.3.26.2 Apache/1.3.26 (Unix) Set-Cookie: tracking= sklk87979HHIhhkhJKNAH8768983 Pragma: no-cache Expires: Thu, 01 Jan 1970 00:00:00 GMT Content-Type: text/html;charset=ISO-8859-1 Content-Language: en-US Content-Length: 24246 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html lang="it"> <head> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> [...]
La prima riga contiene la versione HTTP utilizzata, un codice numerico che contiene il risultato della HTTP Request (200 significa che la richiesta è stata accettata) e una risposta testuale che indica lo stato della response in questo caso "OK". La seconda riga contiene informazioni sulla data.
Un'altra informazione interessante è quella contenente il Server utilizzato e la sua versione (informazioni che può essere comunque modificata dall'amministratore di sistema)
Durante la valutazione della sicurezza di un sistema, il recupero delle informazioni riguardo alle versioni dei software installati ci permette di sfruttare vulnerabilità note di quella versione. In caso di errori nelle informazioni su cui basiamo il nostro lavoro, potremmo non ottenere risultati o addirittura procurare danni al sistema.
La riga Set-Cookie invia al browser informazioni riguardo ,per esempio, i dati sulla sessione.
La riga Pragma indica al browser se il contenuto della response deve essere mantenuto in cache.
Altre informazioni sono il tipo di contenuto, la lingua, la lunghezza del contenuto.
Dopo l'intestazione HTTP c'è generalmente una riga vuota seguita dal contenuto della pagina che il server sta inviando in formato html.