articles » cosa sono le user-agent string?
sorry, this article is provided only in Italian
cosa sono le user-agent string?
read 2640 times
user-agent questi conosciuti
Lo user-agent è una qualsiasi applicazione che utilizza un protocollo di rete; in particolare il termine è principalmente riferito ad applicazioni che utilizzano il protocollo HTTP (in pratica Internet). Tali applicazioni spaziano dai comuni Browser ai programmi di spidering (i bot dei motori di ricerca).
Quando viene inoltrata una richiesta HTTP da una qualsiasi applicazione, fra le varie informazioni (headers), viene inviata una stringa chiamata appunto useragent string, il cui prefisso è solitamente "User-Agent:", che comprende informazioni circa l'applicazione e che in aggiunta può presentare informazioni circa il sistema operativo, la lingua; i bot includono spesso un URL alla pagina principale del bot o un'email dello sviluppatore per informazioni e/o contatti.
Secondo le specifiche ufficiali tale header non è obbligatorio, ma viene naturalmente incluso in ogni richiesta http da qualsiasi user-agent.
le user-agent nella storia
Nel corso della storia di internet si sono susseguite alcune predominanze da parte di specifici browser, determinate dalla massiccia diffusione di utilizzo degli stessi.
Il primo browser di diffusione massiccia fu Netscape: questo determinò che lo sviluppo dei siti web propendesse verso la compatibilità con tale browser piuttosto che con le specifiche (in realtà raccomandazioni) di organi come il W3C o il IETF.
A causa di ciò gli stessi siti web si munirono di sistemi di identificazione del browser (tecnica denominata user-agent sniffing) per bloccare o limitare l'accesso al contenuto a browser differenti da Netscape; tutto ciò porto gli altri browser a subire una sorta di monopolio di internet.
Per ovviare a queste limitazioni, browser quali Internet Explorer modificarono la loro stringa user-agent in maniera da simulare Netscape (tecnica denominata user-agent spoofing).
In pratica la stringa user-agent venne modificata aggiungendo "Mozilla/x.x" (dove x.x è la versione di Netscape) nella parte iniziale e notificando la reale identità di Explorer solo nella parte finale.
Internet Explorer 1.0
Microsoft Internet Explorer/1.0 (Windows 95)
Internet Explorer 1.5
Mozilla/1.22 (compatible; MSIE 1.5; Windows NT)
Va segnalato che l'identificatore Mozilla non si riferisce al browser open-source Mozilla, creato successivamente, ma al nome in codice di Netscape (che è poi anche il nome della sua mascotte presente in vari loghi).
Questo identificatore a inizio stringa si diffuse, in maniera profonda successivamente quando Internet Explorer surclassò Netscape in termini di diffusioni, e gli altri browser tentarono la tecnica di spoofing verso lo stesso Explorer.
In tempi recenti browser rivali di Internet Explorer (quali Firefox, Opera e Safari) integrarono al loro interno un sistema di cloacking (mascheramento) permettendo all'utente di selezionare la user-agent string da inviare nelle richieste http, sostituendo completamente la user-agent originale dell'applicazione con quella di una applicazione rivale.
Ancora oggi è possibile trovare siti web che rifiutano l'accesso a browser differenti da Internet Explorer (e spesso Firefox), per motivi spesso relativi più che al rendering del contenuto della pagina alla compatibilità con lo scripting lato client (normalmente Javascript) che viene implementato (principalmente per quanto riguarda il DOM) in maniera differente a seconda del browser.
Il cloaking viene spesso utilizzato anche da programmi che non utilizzano il protocollo HTTP per la normale navigazione, come i download manager o i browser offline, i quali spesso sono esclusi dall'accesso ai siti web; tramite il cloaking (principalmente simulando Internet Explorer) l'accesso viene consentito.
Negli ultimi anni la diffusione del concetto di Standard nella scrittura delle pagine web è notevolmente aumentata, soprattutto a organismi quali il W3C e a una maggiore consapevolezza degli sviluppatori, tanto che la filosofia di "BEST VIEWED WITH..." ("OTTIMIZZATO PER ...") è ormai considerata non professionale e deleteria, a favore invece di una campagna per la corretta e identica visualizzazione su qualsiasi browser (almeno in teoria).
La valenza dell'header User-Agent rimane in ogni caso alta, soprattutto per questioni statistiche di accessi e quindi diffusione dei browser.
Proprio riguardo alle statistiche è certo che uno dei peggiori mali dell'amplio utilizzo delle tecniche di spoofing è la sovrastima sulla diffusione di Internet Explorer.
la forma di una stringa user-agent
Proprio a causa dello spoofing nel corso degli anni l'idea (perché di standard certo non si può parlare) alla base della struttura di una user-agent string è stata stravolta.
In origine una user agent avrebbe dovuto essere rappresentata così
| User-Agent | "User-Agent" ":" 1*( product | comment ) |
| product | token ["/" product-version ] |
| product-version | token |
| comment | "(" *( ctext | comment ) ")" |
| ctext | [any TEXT excluding "(" and ")"] |
| token | 1*[any CHAR except CTLs or tspecials] |
| tspecials | "(" | ")" | "<" | ">" | "@" | "," | ";" | ":" | "\" | <"> | "/" | "[" | "]" | "?" | "=" | "{" | "}" | SP | HT |
un esempio pratico:
Mozilla/4.04 (Win95; I)
"Mozilla" è evidentemente il product, "4.04" è il product-version e "(Win95; I)" è il comment.
Semplice quindi identificare Netscape 4.04 (ricordando che Mozilla è il nome in codice, e quindi il product-name di Netscape); sui commenti torneremo più avanti.
Internet Explorer, come descritto precedentemente, prese tale stringa e la ampliò, inserendo il proprio token all'interno dei commenti e mantenendo quindi come product Mozilla
ecco come si presenta Internet Explorer 5.5:
Mozilla/4.0 (compatible; MSIE 5.5; Windows NT 5.0)
Anche in questo caso, anche se erroneamente, una applicazione di identificazione che si attenesse alle regole standard identificherebbe l'user-agent come Netscape 4.0, quando invece si tratta di Internet Explorer 5.5.
Attraverso questo primo passo (cominciato con IE 1.5) gli standard riguardanti le user-agent string sono stati irrimediabilmente infranti e successivamente nessun browser (esclusi pochi eletti quali Opera) lo rispetteranno più.
Si può leggere quindi, dalla pagina ufficiale microsoft riguardante le user-agent string di MSIE, la struttura ufficiale di una user-agent Internet Explorer:
Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0)
APPLICATION/VERSION (compatible; VERSION TOKEN, PLATFORM TOKEN)
Mozilla/4.0 quindi per simulare Netscape 4.0 (anche se ormai tale necessità non è certamente più utile ma viene mantenuta solo per retrocompatibilità se non inerzia), compatible per indicare una non meglio precisata compatibilità con una serie di standard, il version token che indica la versione di IE, e il platform token per indicare la versione del sistema operativo e in aggiunta alcune informazioni circa la piattaforma hardware, e il framework .net. (una lista dei valori è presente nella pagina ufficiale precedentemente indicata).
Infine un esempio di una user-agent di Safari
Mozilla/5.0 (Macintosh; U; PPC Mac OS X; en) AppleWebKit/XX (KHTML, like Gecko) Safari/YY
Anche in questo caso si può notare lo spoofing verso Netscape, nei commenti la piattaforma e la lingua e successivamente il motore di rendering con versione (AppleWebKit) e infine la vera applicazione con versione (Safari).
Un ulteriore esempio di come le regole vengano ignorate.
Tutte le informazioni sulle user-agent safari (e applewebkit) sono disponibili in una pagina dedicata su apple.com.
Discorso differente per quanto riguarda i robot.
Quasi sempre i robot rispettano la regola base che richiede di indicare applicazione e versione a inizio stringa; inoltre molto raramente indicano nei commenti informazioni quali il sistema operativo o la lingua, ma spesso presentano un link di riferimento alla pagina ufficiale del bot.
Un esempio per tutti, la user-agent string di Google:
googlebot/2.1 (+http://www.google.com/bot.html)
L'obiettivo di questo documento non è certo di analizzare una per una tutte le user-agent string e i loro standard, in ogni caso risulterà certamente chiaro che non esiste un vero standard o che comunque non viene in alcun modo rispettato.
Proprio a causa di ciò l'identificazione di un browser dalla sua user-agent è un'operazione più complessa di quanto in teoria dovrebbe essere.
Per quanto riguarda i browser però su alcuni punti certezze ve ne sono eccome:
1. L'identificazione di Netscape come browser è da considerarsi probabile solo quando si sono passati in rassegna tutti i browser conosciuti (questo anche per quanto riguarda Internet Explorer)
2. La lingua all'interno di una user-agent, anche se non sempre presente, è sempre indicata tramite un codice lingue che si attiene alle specifiche ISO (639 per i primi due caratteri e 3166 per i successivi due caratteri, rispettivamente la abbreviazione lingua e il codice nazione)
3. Il livello di crittazione (Encryption strength), anche se non sempre presente, è sempre indicato tramite un codice alfabetico a tre possibilità "U", "I", "N", rispettivamente USA (128bit+), International (40bit), None (assente).
Per quanto riguarda i singoli browser maggiori informazioni sono reperibili nel database di useragents.org ( e nelle categorie specifiche browser, robot e sistemi operativi) o sui link ai siti ufficiali che ogni scheda propone.
Simone Cingano



CCBot 1.0
Sconosciuto