Selv om mange nettleserbrukere blokkerer sporingscookies, så kan de likevel ofte spores på tvers av nettsteder ved hjelp av såkalte «fingerprinting»-teknikker som blant annet er basert på de mange små forskjellene det er mellom programvare og maskinvaren den enkelte bruker benytter.
User-Agent-strengen
En viktig faktor til dette er det som kalles for User-Agent-strengen, som vanligvis inneholder informasjon om nettleseren og det underliggende operativsystemet, samt ofte en del usannheter for å forsøke å narre webservere til å levere webinnholdet på ønsket måte.
Et eksempel på det sistnevnte er at Vivaldi før jul endret User-Agent-strengen til nettleseren slik at den er identisk med User-Agent-strengen til Chrome. Dette for at alle nettsteder skal fungere skikkelig i nettleseren.
Du kan se hva din nettleser oppgir som User-Agent-streng på denne siden. Nedenfor vises User-Agent-strengene til henholdsvis Firefox, Chrome og Edge Legacy, samtlige på Windows 10.
Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:72.0) Gecko/20100101 Firefox/72.0
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.117 Safari/537.36
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.102 Safari/537.36 Edge/18.18363
Mens User-Agent-strengen til Firefox er temmelig kompakt, så inkluderer de to andre en rekke produktnavn og versjonsnumre som egentlig ikke har så mye med disse produktene å gjøre. Dette gjelder ikke minst den gamle versjonen av Edge, som ikke har noen som helst med verken Mozilla, AppleWebKit, KHTML, Gecko, Chrome eller Safari å gjøre.
Chrome er i det minste utstyrt med en renderingsmotor som bygger på et par av disse.
Et nytt alternativ
Både sporingen basert på fingerprinting og behovet for å jukse med innholdet i strengen er noe som var en del av den opprinnelige hensikten med User-Agent-strengen. Kall det gjerne en form for misbruk.
Derfor er flere i webfellesskapet i god gang med å utvikle et alternativ som vil kunne erstatte User-Agent-strengen og samtidig begrense sporingsmulighetene og kvitte seg med historiske ting «Mozilla/5.0».
Det som kan se ut til å bli alternativet til User-Agent-strengen, er det som kalles for User Agent Client Hints (UA-CH). Den er foreslått av Google. I alle fall Microsoft ser ut til å gi sin tilslutning til denne.
Porsjonsvis deling av informasjon
Også UA-CH vil i utgangspunktet levere informasjon om nettleseren som en «header» sammen i den første forespørselen fra nettleseren til en webserver. Men denne informasjonen vil vare langt mer begrenset enn det som er tilfellet med User-Agent-strengen.
Sec-CH-UA: "Examplary Browser 73"
I praksis dreier det seg bare om navnet på nettlesere og hovedversjonsnummeret. Dersom webserveren har behov for mer informasjon, kan den sende en header tilbake hvor det spesifiseres hvilken informasjon som ønskes:
Accept-CH: UA, Platform
Som svar på denne forespørselen, vil nettlesere kunne oppgi et mer detaljert versjonsinformasjon og navnet på operativsystemet. Dette sendes med neste forespørsel fra nettleseren:
Sec-CH-UA: "Examplary Browser 73.3R8.2H.1"
Sec-CH-Platform: "Windows 10"
I spesifikasjonsutkastet foreslås det også flere andre slike verdier, for eksempel for plattform-/prosessorarkitekturen og produktnavnet på enheten som benyttes.
Sånn sett så tilbyr det mye av det samme som User-Agent-strengen, men fordi dette deles ut i porsjoner, så kan også deler av informasjonen enklere holdes tilbake av nettleseren – enten automatisk eller som følge av brukerinnstillinger. For eksempel den nevnte informasjonen om plattformarkitektur være forbeholdt tilfeller hvor nettleseren sender en forespørsel om å laste ned en fil, noe som gjør det mulig for webserveren å tilby utgave av programvare som tilbys til flere plattformarkitekturer, som ARM64 eller IA32.
Hva så med User-Agent-strengen?
Google har muligens kommet lengst med planleggingen av å tilby UA-CH og planlegger en trinndelt innføring. Allerede i Chrome 81, som kommer i midten av mars, vil nettleseren komme med konsollvarsler når websider forsøker å lese User-Agent-strengen via JavaScript-API-et navigator.userAgent. De vil få beskjed om at denne aksessen vil være uønsket i framtiden. Det er likevel ingenting som tyder på at User-Agent-strengen vil bli fjernet i overskuelig framtid.
Derimot vil Chrome i versjon 83, som kommer i juni, være den siste versjonen av nettleseren hvor versjonsnummeret som oppgis i User-Agent-strengen er oppdatert. Nummeret låses, slik at akkurat det samme versjonsnummeret oppgis også i framtidige versjoner av Chrome.
Dermed sikres bakoverkompatibiliteten til løsninger som bruker versjonsnummeret i User-Agent-strengen. Har de behov for å vite versjonsnummeret til nyere versjoner av Chrome, er det UA-CH-informasjonen som må benyttes.
OS-informasjonen viskes ut
I Chrome 83 vil den delen av User-Agent-strengen som består av versjonsnummeret til operativsystemet bli gitt en felles verdi, slik at versjonsnummeret i praksis ikke lenger vil være tilgjengelig.
I Chrome 85 vil Google gå enda lenger og også skjule navnet på operativsystemet og enheten. I stedet vil trolig bare bli oppgitt om det dreier seg om et operativsystem for PC-er eller for mobile enheter som smartmobiler og nettbrett.
Apple og Mozilla
Dette med å låse informasjonen i User-Agent-strengen var noe Apple gjorde i Safari allerede i 2017, men uten å tilby noe alternativ. Budskapet var at feature-deteksjon i stedet. Dette skal ha møtt en del motstand, blant annet fra webutviklere som fortalte at de bruker versjonsnummeret til Safari på måter som feature-deteksjon ikke kan erstatte, blant annet på grunn av bugs i visse versjoner av nettleseren. Apple har derfor i ettertid delvis reversert den endringen.
Om Apple har vist noen interesse for UA-CH, er uvisst.
Mozilla er positive til å låse informasjonen i User-Agent-strengen, men vil heller at websider og -applikasjoner aktivt skal be om User-Agent-informasjonen via et foreslått JavaScript-API – NavigatorUAData, som er en del av UA-CH-spesifikasjonen – framfor at nettleseren skal utlevere noe som helst slikt helt uoppfordret.
Google innser at denne situasjonen kan føre til at utviklere vil avhenge av User-Agent-strengen når det gjelder noen nettlesere, og UH-CH når det gjelder andre nettlesere.
Den generelle anbefalingen er å bruke feature-deteksjon der hvor dette er mulig. Det fungerer på tvers av alle nettlesere.
Mer om disse planene kan leses her.