{"id":1434,"date":"2014-01-01T09:30:31","date_gmt":"2014-01-01T08:30:31","guid":{"rendered":"http:\/\/christeninformatica.ch\/?p=1434"},"modified":"2022-08-15T10:50:43","modified_gmt":"2022-08-15T08:50:43","slug":"il-protocollo-http-tratto-dal-libro-hacking-web-sicurezza-nel-groviglio-della-rete-italiano","status":"publish","type":"post","link":"https:\/\/christeninformatica.ch\/it\/il-protocollo-http-tratto-dal-libro-hacking-web-sicurezza-nel-groviglio-della-rete-italiano\/","title":{"rendered":"Hacking Web: Sicurezza nel groviglio della rete &#8211; Il protocollo http"},"content":{"rendered":"<p>II concetto fondamentale che dobbiamo trattare a questo punto \u00e8 il protocollo HTTP (HyperText Transfer Protocol), che costituisce il meccanismo di trasferimento alla base del Web e il metodo preferito per scambiare documenti indicizzati da URL tra server e client. Nonostante la presenza del termine hypertext nel nome, il protocollo HTTP e il vero e proprio contenuto ipertestuale (il linguaggio HTML) spesso esistono indipendentemente l\u2019uno dall\u2019altro. Ci\u00f2 premesso, a volte sono intrecciati anche in modi sorprendenti.<\/p>\n<p>La storia di <b>HTTP<\/b> offre un\u2019interessante visione sulle ambizioni dell\u2019autore e sulla crescente rilevanza di Internet. La prima bozza del protocollo (HTTP\/0.91) datata 1991 \u00e8 scritta da <b>Tim Berners-Lee<\/b>, era lunga a malapena una pagina e mezza e mancava anche delle pi\u00f9 intuitive funzioni che si sarebbero rese necessarie in futuro, come l\u2019estendibilit\u00e0 richiesta per la trasmissione di dati non HTML.<\/p>\n<p>Cinque anni e diverse iterazioni della specifica dopo, il primo standard ufficiale HTTP\/1.0 (RFC 19452) prov\u00f2 a rettificare queste mancanze in circa 50 pagine fitte di testo. Arriviamo al 1999 e con HTTP\/1.1 (RFC 26163) i sette autori accreditati tentarono di anticipare quasi ogni possibile utilizzo del protocollo, creando un volume di 150 pagine.<\/p>\n<p>E non \u00e8 tutto: al momento in cui scriviamo, si lavora su HTTPbis4, sostanzialmente un sostituto di HTTP\/1.1, con una specifica di circa 360 pagine. Anche se molto del con\u00adtenuto accumulato \u00e8 irrilevante per il Web moderno, questa progressione evidenzia che il desiderio di aggiungere nuove funzioni supera di gran lunga quello di rimuovere le funzioni scarsamente utilizzate.<\/p>\n<p>Oggi tutti i client e server supportano un sovrainsieme non proprio accurato di HTTP\/1.0, mentre la maggioranza parla un dialetto ragionevolmente completo di <b>HTTP\/1.1<\/b>, con l\u2019aggiunta di alcune eccezioni. Nonostante non esista alcun motivo pratico per farlo, molti server web e tutti i browser pi\u00f9 comuni mantengono la compa\u00adtibility all\u2019indietro con HTTP\/0.9.<\/p>\n<h2>Sintassi di base del traffico HTTP<\/h2>\n<p>A prima vista <b>HTTP<\/b> \u00e8 un semplice protocollo di testo basato su <b>TCP\/IP<\/b>. TCP (Tran\u00adsmission Control Protocol) \u00e8 uno dei protocolli di comunicazione alla base di Internet. Fornisce il livello di trasporto a tutti i protocolli applicativi basati su di esso.<\/p>\n<p>Offre una connettivit\u00e0 ragionevolmente affidabile, ordinata, con mutuo riconoscimento e orientata alle sessioni tra host di rete. Nella maggioranza dei casi tale protocollo si dimostra anche abbastanza resistente rispetto ad attacchi &#8211; come il blind packet spoofing &#8211; portati da altri host non locali su Internet. Ogni sessione HTTP comincia stabilendo una connessione TCP al server, tipicamente sulla porta 80, quindi effettuando una richiesta contenente un URL. In risposta, il server produce il file richiesto e, nel caso pi\u00f9 rudimentale, chiude la connessione TCP immediatamente dopo.<\/p>\n<p>Lo standard HTTP\/0.9 originale non prevedeva alcuno spazio per lo scambio di metadati aggiuntivi tra le parti coinvolte. La richiesta del client consisteva sempre di un\u2019unica riga, che iniziava con GET seguito dal percorso e dalla stringa di query dell\u2019URL e terminata con un singolo avanzamento di riga CRLF (codici ASCII OxOD OxOA; per i server era consigliato accettare anche un singolo LF). Una richiesta HTTP\/0.9 poteva quindi avere l\u2019aspetto seguente:<\/p>\n<div class=\"comandi\">\n<blockquote>\n<pre>GET \/-fuzzy_bunnies.txt\n<\/pre>\n<\/blockquote>\n<\/div>\n<p>In risposta a questo messaggio, il server inviava immediatamente il carico di dati HTML. La specifica richiedeva che i server restituissero righe lunghe esattamente 80 caratteri, ma questo consiglio non e mai stato seguito da nessuno.<\/p>\n<p>L&#8217;approccio di HTTP\/0.9 presenta diverse lacune sostanziali. Per esempio, non da modo al browser di comunicare le preferenze linguistiche dell\u2019utente, di fornire un elenco di tipologie di documenti supportati, e cos\u00ec via. Inoltre non da modo al server di informare che il file richiesto non e stato trovato, che \u00e8 stato spostato a un altro indirizzo o che il file scaricato non \u00e8 un documento HTML &#8211; solo per iniziare.<\/p>\n<p>Infine, il protocollo non \u00e8 gentile con gli amministratori dei server: essendo l\u2019URL limitato a percorso e stringa di query, \u00e8 impossibile per un server ospitare siti diversi, distinti dai loro nomi di host, con un solo indirizzo IP e &#8211; a differenza dei record DNS &#8211; gli indirizzi IP non sono economici.<\/p>\n<p>Per sanare queste lacune (e per fare spazio a futuri trucchi), gli standard HTTP\/1.0 e HTTP\/1.1 implementano un formato di conversazione leggermente differente: alla prima riga della richiesta viene aggiunta la versione del protocollo utilizzato, di seguito potranno esserci zero o pi\u00f9 coppie nome: valore (note come header) ciascuna su una riga a s\u00e9. Gli header pi\u00f9 comuni che si possono trovare nelle richieste sono User-Agent (la versione del browser), Host (il nome dell\u2019host presente nell\u2019URL), Accept (i tipi di documento MIME supportati. II tipo MIME, noto anche come Internet media type, \u00e8 un semplice valore formato da due componenti che identifica la classe e il formato di ogni tipo di file. IL concetto nasce negli RFC 2045 e RFC 2046, dove serviva a descrivere i vari tipi di allegati della posta elettronica.<\/p>\n<p>L\u2019elenco ufficiale di tali valori, come text\/plain o audio\/mpeg, \u00e8 attualmente mantenuto dall\u2019IANA, ma tipi ad hoc sono decisamente comuni), Accept-Language (le lingue accettate) e Referer (un campo &#8211; dal nome curiosamente scritto in modo errato per la lingua inglese &#8211; che indica la pagina di provenienza della richiesta, se esiste).<\/p>\n<p>Gli header si concludono con un\u2019unica riga vuota, la quale pu\u00f2 essere seguita da qualsiasi dato il client voglia passare al server (la cui lunghezza in byte dev\u2019essere specificata esplicitamente con l\u2019header Content-Length).<\/p>\n<p>Il contenuto di questo carico di dati e opaco per il protocollo; in HTML questo spazio viene generalmente utilizzato per l\u2019invio dei dati dei moduli in uno dei diversi formati possibili, anche se non \u00e8 in alcun modo vincolante.<\/p>\n<p>Quindi, una richiesta HTTP\/1.1 pu\u00f2 avere l\u2019aspetto seguente:<\/p>\n<div class=\"comandi\">\n<blockquote>\n<pre>POST \/fuzzy_bunnies\/bunny_dispenser.php HTTP\/1.1 Host: www.fuzzybunnies.com User-Agent: Bunny-Browser\/1.7 Content-Type: text\/plain Content-Length: 17\nReferer: http:\/\/www.fuzzybunnies.com\/main.html\nI REQUEST A BUNNY\n<\/pre>\n<\/blockquote>\n<\/div>\n<p>Il server deve rispondere a questa richiesta con una riga nella quale dichiara la versione di protocollo supportata, un codice di stato numerico (utilizzato per indicare condizioni di errore e altre circostanze particolari) e, opzionalmente, un messaggio di stato in formato leggibile dall\u2019uomo. Quindi seguono diversi header auto-esplicativi che terminano con una riga vuota. La risposta prosegue con il contenuto della risorsa richiesta:<\/p>\n<div class=\"comandi\">\n<blockquote>\n<pre>HTTP\/1.1 200 OK Server: Bunny-Server\/O.9.2 Content-Type: text\/plain Connection: close\nBUNNY WISH HAS BEEN GRANTED\n<\/pre>\n<\/blockquote>\n<\/div>\n<h2>Comportamento dell&#8217;header Referer<\/h2>\n<p>Come abbiamo anticipato precedentemente in questo capitolo, le richieste HTTP possono contenere un header Referer che contiene l\u2019URL del documento da cui in qualche modo proviene la navigazione. Esso \u00e8 destinato a favorire la ricerca di errori di programmazione e a promuovere la crescita del Web enfatizzando i riferimenti incrociati tra le pagine web.<\/p>\n<p>Sfortunatamente, questo header pu\u00f2 rivelare anche alcune informazioni sulle abitudini di navigazione dell\u2019utente a dei malintenzionati, e lasciar scappare informazioni sensibili codificate nei parametri della stringa di query della pagina di provenienza. A causa di queste preoccupazioni e della mancanza di consigli validi su come mitigarne gli effetti, questo header viene spesso abusato per scopi di sicurezza, ma non \u00e8 adatto a questo compito. II principale problema \u00e8 che non c\u2019\u00e8 modo di distinguere un client che non trasmette questo header a causa delle preferenze di privacy dell\u2019utente, da quello che non lo trasmette per il tipo di navigazione in corso, e da quello che deliberatamente lo modifica cancellando la provenienza da un sito malevolo.<\/p>\n<p>Normalmente questo header e presente nella maggior parte delle richieste HTTP e preservato anche nei reindirizzamenti HTTP, tranne nelle situazioni seguenti.<\/p>\n<ul>\n<li>Quando si digita manualmente un nuovo URL nella barra degli indirizzi o si apre una pagina dai preferiti o segnalibri.<\/li>\n<li>Quando la navigazione parte da un documento con un pseudo URL come data: o javascript:<\/li>\n<li>Quando la richiesta \u00e8 il risultato di un reindirizzamento controllato dall\u2019header Refresh (ma non nel caso in cui si usi l\u2019header Location).<\/li>\n<li>Ogni volta che il sito di provenienza e crittografato e la destinazione \u00e8 in chiaro. In base alla sezione 15.1.2 dell\u2019RFC 2616, questo avviene per motivi di privacy, in realt\u00e0 non ha molto senso. La stringa Referer viene trasmessa a terzi quando si da un sito crittografato a un altro e,a parit\u00e0 di altre condizioni,l\u2019uso della crittografia non \u00e8 sinonimo di attendibilit\u00e0.<\/li>\n<li>Se l\u2019utente decide di bloccare o modificare arbitrariamente questo header agendo sulle impostazioni del browser o installando un plug-in per la privacy.<\/li>\n<\/ul>\n<p>Come dovrebbe risultarvi evidente, quattro di queste cinque condizioni possono essere riprodotte di proposito da qualsiasi sito.<\/p>\n<h2>Tipi di richieste HTTP<\/h2>\n<p>La prima specifica HTTP\/0.9 definiva un unico metodo (o \u201cverb\u201d) per richiedere un documento: GET. Le successive versioni sperimentarono un sempre pi\u00f9 strano insieme di metodi che consentissero interazioni diverse dallo scaricamento di un documento dall\u2019esecuzione di uno script, tra cui curiosit\u00e0 come SHOWMETHOD, CHECKOUT e &#8211; perche no &#8211; SPACEJUMP.<\/p>\n<p>La maggior parte di questi esperimenti di pensiero \u00e8 stata abbandonata in HTTP che definisce un insieme molto piu gestibile di otto metodi. Solo i primi due, GET e POST, hanno qualche significato per il Web di oggi.<\/p>\n<h3>GET<\/h3>\n<p>I metodo GET \u00e8 nato con il significato di \u201cscaricamento di informazioni\u201d. In pratica \u00e8 utilizzato in quasi tutte le interazioni tra client e server nel corso di una normale sessione di navigazione. Le richieste GET tradizionali non trasportano alcun dato fornito dal browser, anche se la cosa non \u00e8 vietata da alcuna specifica. Questo perch\u00e9 le richieste GET non dovrebbero avere, per citare l\u2019RFC,\u201cil significato di intraprendere un\u2019azione diversa dallo scaricamento\u201d, ovvero non dovrebbero operare modifiche persistenti allo stato di un\u2019applicazione. Questa interpretazione ha progressivamente perso di significato nelle applicazioni moderne, dove lo stato spesso non viene nemmeno gestito sul lato server; conseguentemente questa raccomandazione e stata ampiamente ignorata dagli sviluppatori di applicazioni (si racconta &#8211; e forse c\u2019\u00e8 un fondo di verit\u00e0 &#8211; di uno sfortunato webmaster di nome john Breckman, il cui sito sarebbe stato accidentalmente cancellato da un robot di un motore di ricerca. II robot ha semplicemente scoperto un\u2019interfaccia amministrativa non autenticata basata su GET, che John aveva scritto per il proprio sito&#8230; e ha allegramente seguito ogni collegamento \u201cdelete\u201d che ha trovato).<\/p>\n<h3>POST<\/h3>\n<p>I metodo POST nasce per l\u2019invio di informazioni (per lo pi\u00f9 da moduli HTML) al server per la loro elaborazione. Dato che le azioni POST possono avere effetti persistenti sullo stato del server, molti browser chiedono conferma prima di ricaricare del contenuto scaricato con POST. Nella maggioranza dei casi, tuttavia GET e POST vengono utilizzati in maniera quasi intercambiabile.<\/p>\n<p>Le richieste POST vengono spesso accompagnate da dei dati, la lunghezza dei quali \u00e8 indicata dall\u2019header Content-Length. Nel caso del codice HTML puro, tali dati posso\u00adno consistere di stringhe con codifiche URL o MIME (un formato che vedremo in dettaglio nel Capitolo 4) anche se, di nuovo, la sintassi non \u00e8 imposta in alcun modo a livello HTTP.<\/p>\n<h3>HEAD<\/h3>\n<p>HEAD e un metodo utilizzato di rado. \u00c8 essenzialmente identico a GET, ma scarica solo gli header HTTP, senza i dati del documento vero e proprio. I browser in genere non effettuano richieste HEAD, ma il metodo viene a volte impiegato dai robot dei motori di ricerca e da altri strumenti automatici, per esempio per rilevare l\u2019esistenza di un file o per controllarne la data di ultima modifica.<\/p>\n<h3>OPTIONS<\/h3>\n<p>OPTIONS e una metarichiesta che scarica l\u2019insieme dei metodi supportati per un particolare URL (o *, che indica il server in generale) in un header di risposta. II metodo OPTIONS non viene impiegato praticamente mai nella pratica, salvo che nell\u2019identificazione dei server; trattandosi di informazioni dal valore limitato, possono anche non essere molto accurate.<\/p>\n<h3>PUT<\/h3>\n<p>Una richiesta PUT consente l\u2019invio di file su un server nella posizione esatta specificata dall\u2019URL. Dato che i browser non supportano questo metodo, le funzioni di upload dei file sono quasi sempre implementate tramite POST a script lato server, piuttosto che con questo approccio &#8211; teoricamente molto pi\u00f9 elegante.<\/p>\n<p>Detto questo, alcuni client e server HTTP non web possono utilizzare questo metodo per i loro scopi. Alcuni server web possono essere configuarati (male) per accettare indiscriminatamente richieste PUT, creando un ovvio rischio per la sicurezza.<\/p>\n<h3>DELETE<\/h3>\n<p>DELETE \u00e8 un metodo autoesplicativo (\u201ccancella\u201d) complementare a PUT &#8211; \u00e8 analogamente poco utilizzato nella pratica.<\/p>\n<h3>TRACE<\/h3>\n<p>TRACE \u00e8 una sorta di richiesta \u201cping\u201d che restituisce informazioni su tutti i proxy attraversati nell\u2019elaborazione di una richiesta. Riporta anche l\u2019eco della richiesta origina browser non fanno richieste TRACE. Tali richieste vengono utilizzate molto di rado per scopi legittimi, il primo dei quali \u00e8 la verifica della sicurezza: possono rivelare interessanti dettagli sull\u2019architettura interna dei server HTTP di una rete remota. Proprio per questa ragione, questo sistema viene quasi sempre disabilitato dagli amministratori dei server.<\/p>\n<h3>CONNECT<\/h3>\n<p>II metodo CONNECT e concepito per stabilire connessioni non HTTP attraverso proxy HTTP. Non dev\u2019essere inviato direttamente ai server. Se su un server viene abilitato accidentalmente il supporto al metodo CONNECT, si pu\u00f2 avere un rischio per la sicurezza &#8211; offrire all\u2019aggressore un modo di veicolare traffico TCP attraverso una rete altrimenti protetta.<\/p>\n<h2>Altri metodi HTTP<\/h2>\n<p>Un certo numero di altri metodi di richiesta sono poi stati sviluppati per essere impiagati da altre applicazioni o dalle estensioni dei browser; l\u2019insieme pi\u00f9 diffuso di tali estensioni HTTP \u00e8 WebDAV, un protocollo di sviluppo e gestione delle versioni, descritto nell\u2019RFC 4918.<\/p>\n<p>Inoltre, anche l\u2019API XMLHttpRequest consente a script JavaScript lato client di effettuare richieste con praticamente qualsiasi metodo verso il server di origine &#8211; anche se quest\u2019 ultima possibilit\u00e0 \u00e8 fortemente ristretta in alcuni browser.<\/p>\n<h2>Codici di risposta del server<\/h2>\n<p>La Sezione 10 dell\u2019RFC 2616 elenca quasi 50 codici di stato che un server pu\u00f2 utilizzare per costruire una risposta. Circa 15 di questi vengono utilizzati nella vita reale, i rimanenti sono li per indicare stati via via pi\u00f9 bizzarri o improbabili come \u201c402 Paymc Required\u201d o \u201c415 Unsupported Media Type\u201d. La maggior parte degli stati di questo elenco non corrisponde con esattezza al comportamento delle moderne applicazioni web; la sola ragione della loro esistenza \u00e8 che qualcuno ha sperato che un giorno lo avrebbe rispecchiato.<\/p>\n<p>Alcuni codici meritano comunque di essere memorizzati, perch\u00e9 molto comuni o con significati particolari, come vediamo nel seguito.<\/p>\n<h3>200-299: successo<\/h3>\n<p>Questo intervallo di codici di stato indica il completamento di una richiesta con suc\u00adcesso:<br \/>\n200 OK. E la risposta normale a una richiesta GET o POST che va a buon fine. II browser visualizza i dati ricevuti immediatamente dopo o li processa in qualche altro modo, dipendente dal contesto.<br \/>\n204 No Content. Questo codice viene talvolta utilizzato per indicare una richiesta a buon fine &#8211; quando non ci si aspetta nessun dato come risposta. II codice 204 interrompe la navigazione sull\u2019URL che l\u2019ha generato e mantiene l\u2019utente sulla pagina di origine.<br \/>\n206 Partial Content. \u00c8 analogo al codice 200. Viene prodotto dal server in risposta a richieste di blocchi da parte del browser. II browser deve gi\u00e0 essere in possesso delle altre parti del documento (o non ne avrebbe richiesto solo un blocco) ed esaminer\u00e0 l\u2019header di risposta Content-Range per ricomporlo prima di effetturarne l\u2019elaborazione.<\/p>\n<h3>300-399: reindirizzamento e altri messaggi di stato<\/h3>\n<p>Questi codici vengono utilizzati per comunicare una variet\u00e0 di stati che non indicano un errore, ma che richiedono un trattamento particolare da parte del browser:<br \/>\n301 Moved Permanently, 302 Found, 303 See Other. Queste risposte indicano al browser di ripetere la richiesta a un nuovo server, specificato nell\u2019header di rispo\u00adsta Location. Nonostante le distinzioni che vengono fatte nell\u2019RFC, tutti i browser moderni quando incontrano questi codici di risposta rimpiazzano POST con GET, eliminano il payload e reinoltrano la richiesta automaticamente.<\/p>\n<p>304 Not Modified. Questa risposta indiretta informa il client che il documento richiesto non e stato modificato rispetto alla copia gi\u00e0 in suo possesso. \u00c8 la risposta a una richiesta condizionata con header come If-Modified-Since, che viene inviata per convalidare nuovamente la cache di documenti del browser. II corpo della ri\u00adsposta non viene visualizzato all\u2019utente. Se il server risponde in questo modo a una richiesta non condizionata, il risultato dipende dal browser e puo essere ridicolo; per esempio, Opera apre una richiesta di download che poi non funziona.<\/p>\n<p>307 Temporary Redirect. Analogamente al codice 302, ma a differenza degli altri metodi di reindirizzamento, i browser non trasformano la richiesta da POST a GET per eseguire un reindirizzamento 307. Questo codice non si usa spesso nelle applicazioni web, e alcuni browser non si comportano coerentemente quando lo ricevono.<\/p>\n<h3>400-499: errori lato client<\/h3>\n<p>Questo intervallo di valori viene utilizzato per indicare condizioni di errore provocati dal comportamento del client:<br \/>\n400 Bad Request (e messaggi correlati). II server non \u00e8 in grado o non vuole processare la richiesta per qualche motivo non specificato. II payload della rispost\u00e0 in genere spiega il problema e generalmente viene gestito dal browser come una risposta 200. Esistono anche varianti pi\u00f9 specifiche, come \u201c411 Length Required\u201d \u201c405 Method Not Allowed\u201d o \u201c414 Request-URI Too Long\u201d. Ci chiediamo tutti perch\u00e9 l\u2019assenza dell\u2019header Content-Length meriti un codice di risposta dedicate (411), mentre l\u2019assenza dell\u2019header Host debba accontentarsi solo di un codice 400 generico.<\/p>\n<p>401 Unauthorized. Questa risposta indica che l\u2019utente deve fornire delle credenziali di autenticazione a livello di protocollo HTTP per accedere alla risorsa. In genere a questo punto il browser chiede all\u2019utente le informazioni per fare il login e visualizza il corpo della risposta solo se il processo di autenticazione non va a buon fine. Questo meccanismo viene illustrato in maggior dettaglio pi\u00f9 avanti nel paragrafo dedicato all\u2019autenticazione HTTP.<\/p>\n<p>403 Forbidden. L\u2019URL richiesto esiste ma non pu\u00f2 essere scaricato per ragioni diverse dall\u2019autenticazione HTTP, per esempio permessi di accesso al filesystem non sufficienti, una regola di configurazione sul server che vieta l\u2019accesso alla risorsa, credenziali insufficienti di qualche tipo &#8211; come cookie non validi o un indirizzo IP di origine non valido. Questa risposta viene generalmente visualizzata all\u2019utente.<\/p>\n<p>404 Not Found. L\u2019URL richiesto non esiste. Questa risposta viene generalmente mostrata all\u2019utente.<\/p>\n<h3>500-599: errore lato server<\/h3>\n<p>\u00c8 una classe di messaggi di errore, prodotti come risposta a problemi verificatisi sul server:<br \/>\n500 Internal Server Error, 503 Service Unavailable, e cosi via. II server ha un problema che determina l\u2019impossibilita di onorare la richiesta. Pu\u00f2 trattarsi di un problema temporaneo, il risultato di una configurazione errata o semplicemente l\u2019effetto di una richiesta a una locazione inattesa. Questa risposta viene generalmente mostrata all\u2019utente.<\/p>\n<h2>Semantica dei cookie HTTP<\/h2>\n<p>I cookie HTTP non fanno parte dell\u2019RFC 2616, ma sono una delle principali estensioni del protocollo utilizzate sul Web. II meccanismo dei cookie consente ai server di memorizzare minuscole coppie nome=valore in modo trasparente nel browser, inviando l\u2019header di risposta Set-Cookie e ricevendole indietro nelle future richieste tramite il parametro client Cookie.<\/p>\n<p>I cookie sono decisamente il modo piu usato di mantenere le sessioni aperte e autenticare le richieste degli utenti; sono una delle quattro forme canoniche di ambient authority sul Web; le altre sono l\u2019autenticazione integrata HTTP, la verifica degli IP e i certificati dei client. L\u2019ambient authority e una forma di controllo d\u2019accesso basata su una proprieta globale e persistente dell\u2019entita richiedente, invece che su una forma esplicita di autorizzazione che sarebbe valida solo per un\u2019azione specifica.<\/p>\n<p>Un cookie che identifichi un utente, che venga incluso indiscrimitatamente in ogni richiesta in uscita verso un dato server, senza alcuna considerazione sul perche venga fatta tale richiesta, ricade in questa categoria.<\/p>\n<p>Implementato in origine da Lou Montulli in Netscape intorno al 1994, e descritto in un breve documento informale di quattro pagine15, questo meccanismo non e stato inserito in alcuno standard nei successivi 17 anni. Nel 1997 l\u2019RFC 210916 ha cercato di documentare questo status quo ma, inspiegabilmente, ha proposto un certo numero di modifiche che, a oggi, la renderebbero sostanzialmente incompatibile con l\u2019attuale comportamento dei browser moderni. Un altro ambizioso sforzo &#8211; Cookie2 &#8211; venne alia luce nell\u2019RFC 296517 ma un decennio piu tardi continua a non avere il supporto di alcun browser, situazione che ha ben poche probability di cambiamento. Un nuovo sforzo per scrivere una specifica ragionevolmente accurata sul meccanismo dei cookie &#8211; RFC 626518 &#8211; si e concluso appena prima della pubblicazione di questo libro, ponendo finalmente termine a questa mancanza di certezze.<\/p>\n<p>A causa della prolungata assenza di standard reali, le implementazioni si sono evolute in modi molto interessanti e talvolta incompatibili. In pratica, si possono creare dei nuovi cookie utilizzando l\u2019header Set-Cookie seguito da un\u2019unica coppia nome=valore e da un certo numero di parametri opzionali separati da punto e virgola che ne defmiscono campo d\u2019applicazione e validita.<\/p>\n<p>Expires. Specifica la data di scadenza di un cookie in un formato simile a quello usato per gli header Date ed Expires. Se un cookie viene creato senza un\u2019esplicita data di scadenza, viene generalmente tenuto in memoria per la durata della sessione del browser (che, specialmente sui computer portatili con la funzione di sospensione, puo anche significare settimane). I cookie con scadenza regolare, invece, vengono salvati su disco e soprawivono tra le varie sessioni, a meno che le impostazioni sulla privacy dell\u2019utente non ne impongano la cancellazione.<\/p>\n<p>Max-age. Questo metodo alternativo di impostare una data di scadenza &#8211; suggerito dai documenti RFC &#8211; non e supportato da Internet Explorer e percio non viene utilizzato nella pratica.<\/p>\n<p>Domain. Questo parametro permette al cookie di essere utilizzato in un dominio piu vasto del nome di host restituito dall\u2019header Set-Cookie. Le regole precise di questo meccanismo e le relative conseguenze sulla sicurezza sono trattate nel Capitolo 9.<\/p>\n<p>Path. Consente a un cookie di avere validita a partire da un particolare percorso. Non e u n meccanismo di sicurezza attuabile nella pratica per le ragioni che vedremo nel Capitolo 9. Puo essere utilizzato per comodita, per evitare che dei cookie con nomi identici possano essere utilizzati in diverse parti di una stessa applicazione.<br \/>\nSecure. Vieta che il cookie venga trasmesso su connessioni non crittografate.<\/p>\n<p>HttpOnly. Fa si che il cookie non possa essere letto attraverso l\u2019API document.cookie di JavaScript. E un\u2019estensione di Microsoft che pero oggi e supportata da tutti i maggiori browser.<\/p>\n<p>Nell\u2019effettuare le successive richieste a un doniinio per cui hanno dei cookie validi, i browser combinano tutte le coppie nome-valore in un unico header Cookie separato da punti e virgola, senza alcun metadato aggiuntivo, che spediscono al server. Se ci sono troppi cookie da inviare in una particolare richiesta, vengono superati i limiti dimensionali per gli header sul server e la richiesta fallisce; non c\u2019e alcun modo per risolvere questa condizione, se non quella di ripulire manualmente l\u2019archivio dei cookie.<\/p>\n<p>Curiosamente, non esiste alcun metodo esplicito con cui i server HTTP possano richiedere la cancellazione dei cookie non piu necessari. Tuttavia, ciascun cookie e iilentificato univocamente da una tupla nome-dominio-percorso (gli attributi secure e httponly vengono ignorati), e questo permette a un vecchio cookie con lo stesso campo ill applicazione di essere semplicemente sovrascritto. Inoltre, se il cookie che sovrascrive ha una data di scadenza gia trascorsa (la data di expires e collocata nel passato), verra immediatamente azzerato: un modo bizantino di cancellare dei dati.<\/p>\n<p>Anche se l\u2019RFC 2109 richiede che debbano essere accettati diversi valori separad da virgola in un unico header Set-Cookie, questa pratica e pericolosa e non piu supportata d.ii browser. Firefox permette di impostare piu cookie per volta tramite 1\u2019API Javascript document.cookie ma, inspiegabilmente, richiede degli avanzamenti riga come delimita- lori al posto delle virgole.<\/p>\n<p>Nessun browser usa le virgole come delimitatori dei Cookie, c riconoscerle lato server andrebbe considerato poco sicuro.<br \/>\nUn\u2019altra importante differenza tra la specifica e la realt\u00e0 consiste nel fatto che i valori nei cookie dovrebbero utilizzare il formato quoted-string delle specifiche HTTP (cfr. il precedente paragrafo dedicato agli header delimitati da punto e virgola), ma solo Firefox e Opera riconoscono tale sintassi nella pratica. Affidarsi a valori quoted-string e quindi insicuro, cosi come permettere virgolette spurie all\u2019interno di cookie controllati da malintenzionati&#8221;.<\/p>\n<p>I cookie non garantiscono di essere particolarmente affidabili. I programmi lato utente permettono di influire ben poco sul numero e la dimensione dei cookie permessi per ciascun dominio e, come caratteristica male interpretata di privacy, possono limitarnc la ilurata di vita. Dato che si puo ottenere la tracciatura dell\u2019utente con affidabilita equi- valente in altri modi, gli sforzi di applicare la tracciatura basata sui cookie producono piu danno che benefici.<\/p>\n<h2>Crittografia a livello di protocollo e certificati client<\/h2>\n<p>Come dovrebbe risultare ormai evidente, tutte le informazioni delle sessioni HTTP vengono scambiate come testo in chiaro nella rete. Negli anni Novanta questo non sarebbe stato un gran problema: certo il testo in chiaro esponeva i propri gusti di navigazione alla vista del provider di Internet impiccioni, o forse ad altri utenti maliziosi del proprio ufficio, o a qualche zelante agenzia governativa, ma la cosa non sembrava peggiore del comportamento di SMTP, DNS e di tutti gli altri protocolli di uso comune. Purtroppo la crescita di popolarit\u00e0 del Web come piattaforma di commercio elettronico ha aggravato il rischio, e la sostanziale regressione della sicurezza di rete causata dalla diffusione di reti Wireless pubbliche \u00e8 stata la goccia che ha fatto traboccare il vaso.<\/p>\n<p>Dopo alcune pezze di scarso successo, una vera soluzione a questo problema fu proposta nell\u2019KFC 2818: perch\u00e9 non incapsulare normali richieste HTTP all\u2019interno di un esistente, multifiinzionale meccanismo di sicurezza noto come TLS o SSL (Transport Lyer Security) sviluppato diversi anni prima? Questo sistema di trasporto fa uno di crittogra a chiave pubblica per creare un canale di comunicazione confidenziale e autenticato tra due punti di rete, senza richiedere alcun tipo di modifica al protocollo HTTP.<\/p>\n<p>La crittografia a chiave pubblica si basa su algoritmi di crittografia asimmetrici. Viene creata una coppia di chiavi: una privata, mantenuta segreta dal proprietario e necessaria per decifrare i messaggi, e una pubblica, che viene diffusa al mondo e utile solo per cifrare i messaggi destinati al proprietario (ma non per decifrarli).<\/p>\n<p>Per consentire ai server web di provare la propria identit\u00e0, ogni browser compatibile con HTTPS viene fornito con un piccolo corredo di chiavi pubbliche appartenenti a alcune autorita di certificazione (CA, Certificate Authorities). Le CA sono organizzazioni ritenute affidabili dai fornitori di browser, che attestano che una particolare chiave pubblica appartiene a uno specifico sito &#8211; dopo aver controllato l\u2019identit\u00e0 della persona che chiede tale attestazione e averne verificato la titolarit\u00e0 del dominio in questione.<\/p>\n<p>L&#8217;insieme delle organizzazioni di fiducia \u00e8 vario, arbitrario e non particolarmente ben documentato, cosa che spesso solleva motivate critiche. Nonostante tutto, alla fine il sistema fa il proprio lavoro ragionevolmente bene. Solo alcuni svarioni sono stati documentati a oggi (compresa la recente compromissione di un\u2019azienda di alto profilo di nome Comodo), e non ci sono notizie di abusi dei privilegi di CA. Nell\u2019implementazione attuale, quando si stabilisce una nuova connessione HTTPS il browser pu\u00f2 riceve una chiave pubblica firmata dal server; ne verifica la firma (che non pu\u00f2 essere applicata se non si ha accesso alla chiave privata della CA), poi controlla che i campi cn (common name) o subjectAltName del certificato indichino che \u00e8 stato rilasciato per il server con cui si vuole dialogare e si accerta che la chiave non sia inserita in un elenco pubblico di chiavi revocate (per esempio perche compromessa o ottenuta con metodi illegali). Se l\u2019esito di tutte queste verifiche \u00e8 positivo, il browser pu\u00f2 procedere a crittografare i messaggi diretti al server con la chiave pubblica che ha ricevuto ed essere certo che solo il server potr\u00e0 decifrarli.<\/p>\n<p>Normalmente il client rimane anonimo: genera una chiave crittografica temporanea, ma il processo non prova l\u2019identita del client. Una prova di questo tipo puo essere necessaria, pero. In alcune organizzazioni si e iniziato a utilizzare i certificati per i client e in molte nazioni sono stati adottati addirittura a livello statale (per esempio per meccanismi di e-government). Dato che lo scopo principale dei certificati client e quello di fornire informazioni sull\u2019identita reale dell&#8217;utente,in genere i browser chiedono conferma prima di inviarli a siti non conosciuti, per ragioni di privacy; oltre a questo, il certificato pu\u00f2 fungere come una ulteriore forma di ambient authority.<\/p>\n<p>Vale la pena di notare che, sebbene <b>HTTPS<\/b> in quanto tale sia uno schema in grado di resistere ad attacchi sia attivi che passivi, non fa molto per nascondere l\u2019evidenza di un accesso a informazioni pubbliche. Non maschera la richiesta <b>HTTP<\/b> grezza e le dimensioni delle risposte, la direzione del traffico e le tempistiche di una tipica sessione di navigazione. La cosa da la possibility a un aggressore passivo e con pochissima padronanza tecnica di venire a conoscenza, per esempio, di quale imbarazzante pagina di Wikipedia la vittima stia visualizzando su un canale cifrato. Infatti, in un caso estremo, alcuni ricercatori Mi\u00adcrosoft hanno illustrato l\u2019uso di sistemi di profilazione dei pacchetti e hanno ricostruito la sequenza di tasti digitati dall\u2019utente durante 1\u2019uso di un\u2019applicazione online.<\/p>\n<h2>Regole di gestione degli errori<\/h2>\n<p>In un mondo ideale, un sospetto di errore in un certificato SSL, come un nome di host scritto in modo fuorviante o un\u2019autorit\u00e0 di certificazione non riconosciuta, causerebbe l&#8217;impossibilit\u00e0 di stabilire una connessione. Errori meno sospetti, come certificati scaduti da pochi giorni o un nome di host errato, potrebbero essere accompagnati da semplici avvisi.<\/p>\n<p>Sfortunatamente la maggioranza dei browser ha indiscriminatamente scaricato la responsabilit\u00e0 del problema sull\u2019utente, cercando di spiegare la crittografia in termini da profani (fallendo clamorosamente) e richiedendo che fosse quest\u2019ultimo a prendere la decisione: vuoi veramente vedere questa pagina o no? La Figura 3.1 mostra una finestra di dialogo di questo tipo.<\/p>\n<p><img decoding=\"async\" src=\"..\/..\/grafica\/errore-certificato-ssl.jpg\" alt=\"errore certificato ssl\"><\/p>\n<p>Il testo e l\u2019aspetto degli <b>avvisi SSL<\/b> si \u00e8 evoluto negli anni verso spiegazioni incredibilmente stupide (ma sempre problematiche) del problema e azioni sempre pi\u00f9 complicate necessarie per superare gli avvisi. Questa tendenza non ha sortito gli effetti sperati: alcune ricerche mostrano che pi\u00f9 del 50% degli avvisi pi\u00f9 terrorizzanti viene scavalcato dagli utenti. \u00c8 facile dare la colpa agli utenti, ma &#8211; alla fine &#8211; si fanno loro le domande sbagliate e si offrono loro esattamente le scelte sbagliate. In tutta franchezza, se \u00e8 opinione comune che saltare gli avvertimenti sia vantaggioso in alcuni casi &#8211; offrire di aprire la pagina in una modalit\u00e0 chiaramente etichettata come \u201csandbox\u201d dove i danni risulterebbero limitati sarebbe una soluzione decisamente pi\u00f9 azzeccata. Quando invece tale convinzione non c\u2019\u00e8, si dovrebbe eliminare ogni possibilit\u00e0 di superare il blocco (obiettivo della Strict Transport Security, meccanismo sperimentale che vedremo nel Capitolo 16).<\/p>\n<h3>Fonte: Hacking Web: Sicurezza nel groviglio della rete &#8211; Michal Zalewski<\/h3>","protected":false},"excerpt":{"rendered":"<p>II concetto fondamentale che dobbiamo trattare a questo punto \u00e8 il protocollo HTTP (HyperText Transfer Protocol), che costituisce il meccanismo di trasferimento alla base del Web e il metodo preferito per scambiare documenti indicizzati da URL tra server e client. Nonostante la presenza del termine hypertext nel nome, il protocollo HTTP e il vero e&#8230;<\/p>\n<p class=\"more-link-wrap\"><a href=\"https:\/\/christeninformatica.ch\/it\/il-protocollo-http-tratto-dal-libro-hacking-web-sicurezza-nel-groviglio-della-rete-italiano\/\" class=\"more-link\">Read More<span class=\"screen-reader-text\"> &ldquo;Hacking Web: Sicurezza nel groviglio della rete &#8211; Il protocollo http&rdquo;<\/span> &raquo;<\/a><\/p>","protected":false},"author":5,"featured_media":1605,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[49],"tags":[133,132,134,113,54,130,12,131,126,135,129,128,20,127,50],"class_list":["post-1434","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-sicurezza-informatica-anonimato","tag-admin","tag-amministratore","tag-applicazioni","tag-hacking","tag-http","tag-https","tag-italiano","tag-libro","tag-michal-zalewski","tag-php","tag-protocol","tag-protocollo","tag-security","tag-sicurezza-nel-groviglio-della-rete","tag-web"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.9 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Hacking Web: Sicurezza nel groviglio della rete - Il protocollo http &#8226; CHIT<\/title>\n<meta name=\"description\" content=\"Il testo che segue \u00e8 tratto dal capitolo http del libro Hacking Web \u2013 Sicurezza nel groviglio della rete di Michal Zalewski.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/christeninformatica.ch\/it\/il-protocollo-http-tratto-dal-libro-hacking-web-sicurezza-nel-groviglio-della-rete-italiano\/\" \/>\n<meta property=\"og:locale\" content=\"it_IT\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Hacking Web: Sicurezza nel groviglio della rete - Il protocollo http &#8226; CHIT\" \/>\n<meta property=\"og:description\" content=\"Il testo che segue \u00e8 tratto dal capitolo http del libro Hacking Web \u2013 Sicurezza nel groviglio della rete di Michal Zalewski.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/christeninformatica.ch\/it\/il-protocollo-http-tratto-dal-libro-hacking-web-sicurezza-nel-groviglio-della-rete-italiano\/\" \/>\n<meta property=\"og:site_name\" content=\"CHIT\" \/>\n<meta property=\"article:published_time\" content=\"2014-01-01T08:30:31+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2022-08-15T08:50:43+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/christeninformatica.ch\/media\/Il-protocollo-http-tratto-dal-libro-hacking-web-sicurezza-nel-groviglio-della-rete.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"730\" \/>\n\t<meta property=\"og:image:height\" content=\"701\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"chitblog\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"chitblog\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"27 minuti\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/christeninformatica.ch\\\/il-protocollo-http-tratto-dal-libro-hacking-web-sicurezza-nel-groviglio-della-rete-italiano\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/christeninformatica.ch\\\/il-protocollo-http-tratto-dal-libro-hacking-web-sicurezza-nel-groviglio-della-rete-italiano\\\/\"},\"author\":{\"name\":\"chitblog\",\"@id\":\"https:\\\/\\\/christeninformatica.ch\\\/#\\\/schema\\\/person\\\/b0952e900860b424a6b0906f1d6a0a64\"},\"headline\":\"Hacking Web: Sicurezza nel groviglio della rete &#8211; Il protocollo http\",\"datePublished\":\"2014-01-01T08:30:31+00:00\",\"dateModified\":\"2022-08-15T08:50:43+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/christeninformatica.ch\\\/il-protocollo-http-tratto-dal-libro-hacking-web-sicurezza-nel-groviglio-della-rete-italiano\\\/\"},\"wordCount\":5005,\"commentCount\":0,\"image\":{\"@id\":\"https:\\\/\\\/christeninformatica.ch\\\/il-protocollo-http-tratto-dal-libro-hacking-web-sicurezza-nel-groviglio-della-rete-italiano\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/christeninformatica.ch\\\/media\\\/Il-protocollo-http-tratto-dal-libro-hacking-web-sicurezza-nel-groviglio-della-rete.jpg\",\"keywords\":[\"admin\",\"amministratore\",\"applicazioni\",\"hacking\",\"http\",\"https\",\"italiano\",\"libro\",\"Michal Zalewski\",\"php\",\"protocol\",\"protocollo\",\"security\",\"Sicurezza nel groviglio della rete\",\"web\"],\"articleSection\":[\"Sicurezza \\\/ Anonimato\"],\"inLanguage\":\"it-IT\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/christeninformatica.ch\\\/il-protocollo-http-tratto-dal-libro-hacking-web-sicurezza-nel-groviglio-della-rete-italiano\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/christeninformatica.ch\\\/il-protocollo-http-tratto-dal-libro-hacking-web-sicurezza-nel-groviglio-della-rete-italiano\\\/\",\"url\":\"https:\\\/\\\/christeninformatica.ch\\\/il-protocollo-http-tratto-dal-libro-hacking-web-sicurezza-nel-groviglio-della-rete-italiano\\\/\",\"name\":\"Hacking Web: Sicurezza nel groviglio della rete - Il protocollo http &#8226; CHIT\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/christeninformatica.ch\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/christeninformatica.ch\\\/il-protocollo-http-tratto-dal-libro-hacking-web-sicurezza-nel-groviglio-della-rete-italiano\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/christeninformatica.ch\\\/il-protocollo-http-tratto-dal-libro-hacking-web-sicurezza-nel-groviglio-della-rete-italiano\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/christeninformatica.ch\\\/media\\\/Il-protocollo-http-tratto-dal-libro-hacking-web-sicurezza-nel-groviglio-della-rete.jpg\",\"datePublished\":\"2014-01-01T08:30:31+00:00\",\"dateModified\":\"2022-08-15T08:50:43+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/christeninformatica.ch\\\/#\\\/schema\\\/person\\\/b0952e900860b424a6b0906f1d6a0a64\"},\"description\":\"Il testo che segue \u00e8 tratto dal capitolo http del libro Hacking Web \u2013 Sicurezza nel groviglio della rete di Michal Zalewski.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/christeninformatica.ch\\\/il-protocollo-http-tratto-dal-libro-hacking-web-sicurezza-nel-groviglio-della-rete-italiano\\\/#breadcrumb\"},\"inLanguage\":\"it-IT\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/christeninformatica.ch\\\/il-protocollo-http-tratto-dal-libro-hacking-web-sicurezza-nel-groviglio-della-rete-italiano\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"it-IT\",\"@id\":\"https:\\\/\\\/christeninformatica.ch\\\/il-protocollo-http-tratto-dal-libro-hacking-web-sicurezza-nel-groviglio-della-rete-italiano\\\/#primaryimage\",\"url\":\"https:\\\/\\\/christeninformatica.ch\\\/media\\\/Il-protocollo-http-tratto-dal-libro-hacking-web-sicurezza-nel-groviglio-della-rete.jpg\",\"contentUrl\":\"https:\\\/\\\/christeninformatica.ch\\\/media\\\/Il-protocollo-http-tratto-dal-libro-hacking-web-sicurezza-nel-groviglio-della-rete.jpg\",\"width\":730,\"height\":701},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/christeninformatica.ch\\\/il-protocollo-http-tratto-dal-libro-hacking-web-sicurezza-nel-groviglio-della-rete-italiano\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/christeninformatica.ch\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Hacking Web: Sicurezza nel groviglio della rete &#8211; Il protocollo http\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/christeninformatica.ch\\\/#website\",\"url\":\"https:\\\/\\\/christeninformatica.ch\\\/\",\"name\":\"CHIT\",\"description\":\"\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/christeninformatica.ch\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"it-IT\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/christeninformatica.ch\\\/#\\\/schema\\\/person\\\/b0952e900860b424a6b0906f1d6a0a64\",\"name\":\"chitblog\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"it-IT\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/321ffb3802ecc0a2fc461c52e31fbbabb19873df19bfb793c8e64c6a0cc49313?s=96&d=identicon&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/321ffb3802ecc0a2fc461c52e31fbbabb19873df19bfb793c8e64c6a0cc49313?s=96&d=identicon&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/321ffb3802ecc0a2fc461c52e31fbbabb19873df19bfb793c8e64c6a0cc49313?s=96&d=identicon&r=g\",\"caption\":\"chitblog\"}}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Hacking Web: Sicurezza nel groviglio della rete - Il protocollo http &#8226; CHIT","description":"Il testo che segue \u00e8 tratto dal capitolo http del libro Hacking Web \u2013 Sicurezza nel groviglio della rete di Michal Zalewski.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/christeninformatica.ch\/it\/il-protocollo-http-tratto-dal-libro-hacking-web-sicurezza-nel-groviglio-della-rete-italiano\/","og_locale":"it_IT","og_type":"article","og_title":"Hacking Web: Sicurezza nel groviglio della rete - Il protocollo http &#8226; CHIT","og_description":"Il testo che segue \u00e8 tratto dal capitolo http del libro Hacking Web \u2013 Sicurezza nel groviglio della rete di Michal Zalewski.","og_url":"https:\/\/christeninformatica.ch\/it\/il-protocollo-http-tratto-dal-libro-hacking-web-sicurezza-nel-groviglio-della-rete-italiano\/","og_site_name":"CHIT","article_published_time":"2014-01-01T08:30:31+00:00","article_modified_time":"2022-08-15T08:50:43+00:00","og_image":[{"width":730,"height":701,"url":"https:\/\/christeninformatica.ch\/media\/Il-protocollo-http-tratto-dal-libro-hacking-web-sicurezza-nel-groviglio-della-rete.jpg","type":"image\/jpeg"}],"author":"chitblog","twitter_card":"summary_large_image","twitter_misc":{"Written by":"chitblog","Est. reading time":"27 minuti"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/christeninformatica.ch\/il-protocollo-http-tratto-dal-libro-hacking-web-sicurezza-nel-groviglio-della-rete-italiano\/#article","isPartOf":{"@id":"https:\/\/christeninformatica.ch\/il-protocollo-http-tratto-dal-libro-hacking-web-sicurezza-nel-groviglio-della-rete-italiano\/"},"author":{"name":"chitblog","@id":"https:\/\/christeninformatica.ch\/#\/schema\/person\/b0952e900860b424a6b0906f1d6a0a64"},"headline":"Hacking Web: Sicurezza nel groviglio della rete &#8211; Il protocollo http","datePublished":"2014-01-01T08:30:31+00:00","dateModified":"2022-08-15T08:50:43+00:00","mainEntityOfPage":{"@id":"https:\/\/christeninformatica.ch\/il-protocollo-http-tratto-dal-libro-hacking-web-sicurezza-nel-groviglio-della-rete-italiano\/"},"wordCount":5005,"commentCount":0,"image":{"@id":"https:\/\/christeninformatica.ch\/il-protocollo-http-tratto-dal-libro-hacking-web-sicurezza-nel-groviglio-della-rete-italiano\/#primaryimage"},"thumbnailUrl":"https:\/\/christeninformatica.ch\/media\/Il-protocollo-http-tratto-dal-libro-hacking-web-sicurezza-nel-groviglio-della-rete.jpg","keywords":["admin","amministratore","applicazioni","hacking","http","https","italiano","libro","Michal Zalewski","php","protocol","protocollo","security","Sicurezza nel groviglio della rete","web"],"articleSection":["Sicurezza \/ Anonimato"],"inLanguage":"it-IT","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/christeninformatica.ch\/il-protocollo-http-tratto-dal-libro-hacking-web-sicurezza-nel-groviglio-della-rete-italiano\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/christeninformatica.ch\/il-protocollo-http-tratto-dal-libro-hacking-web-sicurezza-nel-groviglio-della-rete-italiano\/","url":"https:\/\/christeninformatica.ch\/il-protocollo-http-tratto-dal-libro-hacking-web-sicurezza-nel-groviglio-della-rete-italiano\/","name":"Hacking Web: Sicurezza nel groviglio della rete - Il protocollo http &#8226; CHIT","isPartOf":{"@id":"https:\/\/christeninformatica.ch\/#website"},"primaryImageOfPage":{"@id":"https:\/\/christeninformatica.ch\/il-protocollo-http-tratto-dal-libro-hacking-web-sicurezza-nel-groviglio-della-rete-italiano\/#primaryimage"},"image":{"@id":"https:\/\/christeninformatica.ch\/il-protocollo-http-tratto-dal-libro-hacking-web-sicurezza-nel-groviglio-della-rete-italiano\/#primaryimage"},"thumbnailUrl":"https:\/\/christeninformatica.ch\/media\/Il-protocollo-http-tratto-dal-libro-hacking-web-sicurezza-nel-groviglio-della-rete.jpg","datePublished":"2014-01-01T08:30:31+00:00","dateModified":"2022-08-15T08:50:43+00:00","author":{"@id":"https:\/\/christeninformatica.ch\/#\/schema\/person\/b0952e900860b424a6b0906f1d6a0a64"},"description":"Il testo che segue \u00e8 tratto dal capitolo http del libro Hacking Web \u2013 Sicurezza nel groviglio della rete di Michal Zalewski.","breadcrumb":{"@id":"https:\/\/christeninformatica.ch\/il-protocollo-http-tratto-dal-libro-hacking-web-sicurezza-nel-groviglio-della-rete-italiano\/#breadcrumb"},"inLanguage":"it-IT","potentialAction":[{"@type":"ReadAction","target":["https:\/\/christeninformatica.ch\/il-protocollo-http-tratto-dal-libro-hacking-web-sicurezza-nel-groviglio-della-rete-italiano\/"]}]},{"@type":"ImageObject","inLanguage":"it-IT","@id":"https:\/\/christeninformatica.ch\/il-protocollo-http-tratto-dal-libro-hacking-web-sicurezza-nel-groviglio-della-rete-italiano\/#primaryimage","url":"https:\/\/christeninformatica.ch\/media\/Il-protocollo-http-tratto-dal-libro-hacking-web-sicurezza-nel-groviglio-della-rete.jpg","contentUrl":"https:\/\/christeninformatica.ch\/media\/Il-protocollo-http-tratto-dal-libro-hacking-web-sicurezza-nel-groviglio-della-rete.jpg","width":730,"height":701},{"@type":"BreadcrumbList","@id":"https:\/\/christeninformatica.ch\/il-protocollo-http-tratto-dal-libro-hacking-web-sicurezza-nel-groviglio-della-rete-italiano\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/christeninformatica.ch\/"},{"@type":"ListItem","position":2,"name":"Hacking Web: Sicurezza nel groviglio della rete &#8211; Il protocollo http"}]},{"@type":"WebSite","@id":"https:\/\/christeninformatica.ch\/#website","url":"https:\/\/christeninformatica.ch\/","name":"CHIT","description":"","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/christeninformatica.ch\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"it-IT"},{"@type":"Person","@id":"https:\/\/christeninformatica.ch\/#\/schema\/person\/b0952e900860b424a6b0906f1d6a0a64","name":"chitblog","image":{"@type":"ImageObject","inLanguage":"it-IT","@id":"https:\/\/secure.gravatar.com\/avatar\/321ffb3802ecc0a2fc461c52e31fbbabb19873df19bfb793c8e64c6a0cc49313?s=96&d=identicon&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/321ffb3802ecc0a2fc461c52e31fbbabb19873df19bfb793c8e64c6a0cc49313?s=96&d=identicon&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/321ffb3802ecc0a2fc461c52e31fbbabb19873df19bfb793c8e64c6a0cc49313?s=96&d=identicon&r=g","caption":"chitblog"}}]}},"_links":{"self":[{"href":"https:\/\/christeninformatica.ch\/it\/wp-json\/wp\/v2\/posts\/1434","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/christeninformatica.ch\/it\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/christeninformatica.ch\/it\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/christeninformatica.ch\/it\/wp-json\/wp\/v2\/users\/5"}],"replies":[{"embeddable":true,"href":"https:\/\/christeninformatica.ch\/it\/wp-json\/wp\/v2\/comments?post=1434"}],"version-history":[{"count":0,"href":"https:\/\/christeninformatica.ch\/it\/wp-json\/wp\/v2\/posts\/1434\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/christeninformatica.ch\/it\/wp-json\/wp\/v2\/media\/1605"}],"wp:attachment":[{"href":"https:\/\/christeninformatica.ch\/it\/wp-json\/wp\/v2\/media?parent=1434"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/christeninformatica.ch\/it\/wp-json\/wp\/v2\/categories?post=1434"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/christeninformatica.ch\/it\/wp-json\/wp\/v2\/tags?post=1434"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}