Mye av innholdet som vises på websider og i webapplikasjoner kan påvirkes eller manipuleres av andre enn nettstedeieren. I mange tilfeller er dette en «feature» og dermed ønskelig. For eksempel er det fint om innholdet i de eventuelle kommentarene til denne artikkelen faktisk vises.
I andre tilfeller kan slik påvirkning føre til stor skade for enten nettstedet, brukerne eller begge deler. Ofte handler dette om injisering av skript- eller SQL-kode som ikke i tilstrekkelig grad renses eller escape'es før innholdet tolkes. Den uønskede koden kan komme fra for eksempel data lagret i en database, nettadressen til websiden eller fra cookies i nettleseren til brukeren.
Slik uønsket kode kan blant annet lede til angrep av en type som kalles for Cross-Site Scripting (XSS), noe som stadig er temmelig utbredt. Dette kan blant annet brukes av angripere til å stjele fortrolig informasjon, slik som brukernavn og passord.
Skadevare stjeler e-post fra Gmail i Chrome og Edge – sender videre til Nord-Korea
Dagens løsninger har svakheter
Selv om det finnes en rekke metoder og verktøy som skal kunne forhindre at dette skjer, dekker ingen alt, og de fleste har svakheter. For eksempel vil ikke løsninger som kjøres på serversiden nødvendigvis ha full oversikt over alt det som faktisk kommer til å bli vist i nettleseren, siden dette ofte kan være sammensatt av innhold fra flere ulike kilder.
Google er i ferd med å implementere en et programmeringsgrensesnitt i Chrome som heter Sanitizer API. Trolig vil heller ikke dette dekke alle behov, men det gjør det mulig for utviklere å være sikrere på at HTML-innhold som i dag settes inn i et nytt eller eksisterende HTML-element ved å endre elementets innerHTML-verdi, kan gjøres uten risiko for at dette injiserte innholdet skal kunne kjøres som kode. I dag må utviklerne selv sørge for at dette innholdet er trygt, for eksempel med escaping eller utrenskning av potensielt skadelige deler.
Erstatter innerHTML
Det Sanitizer API tilbyr, er metode som heter setHTML(), som har mye felles med det å sette et HTML-elements innerHTML-verdi. Den bør dermed være ganske grei å ta i bruk straks nettleserne får støtte for den.
Det setHTML også sørger for at blir gjort, er at nettleseren analyserer hele strengen som skal settes inn, fjerner de eventuelle taggene og attributtene som den vurderer som skadelige – slik som skript – uten å fjerne det som er harmløst.
Ruller ut nye Android-funksjoner: Skal bruke KI til å forhindre mobiltyveri
Nettleseren vet best
Det finnes egne biblioteker som allerede kan gjøre dette, men ifølge Sanitizer API-spesifikasjonen har dette vist seg å være en noe skjør tilnærming, blant annet siden disse bibliotekene ikke nødvendigvis gjengir en streng som HTML på akkurat samme måte som det enhver nettleser gjør – noe som også kan bli endret over tid.
– Ting som én gang var trygge, kan ende opp som tidsinnstilte bomber basert på nye egenskaper på plattformnivået, skriver forfatterne av Sanitizer API-spesifikasjonen.
Nettlesere har derimot ganske bra anelse om når de kommer til å kjøre kode. Sanitizer API er derfor en forbedring av dagens biblioteker ved at nettleseren læres opp til å gjengi HTML fra vilkårlige strenger på en trygg måte. Med denne tilnærmingen anses det også som mer sannsynlig at funksjonaliteten vil vedlikeholdes og oppdateres for å holde tritt med nettleserens egne endringer knyttet til tolking og gjengivelse.
Selv om Sanitizer API vil kunne brukes så enkelt som beskrevet over, er det også muligheter for å overstyre standardfunksjonaliteten, for eksempel å lage egne lister over HTML-elementer og -attributter som alltid skal tillates, blokkeres eller droppes helt.
Kommende støtte
Chrome 102 og andre nettlesere basert på Chromium 102 har nå noe støtte for Sanitizer API-komponentene. Full støtte for selve setHTML()-metoden ventes å være inkludert i Chromium 105. Også Mozilla holder på å utstyre Firefox med støtte for Sanitizer API. Ifølge Google har Apple så langt ikke signalisert noen planer om å støtte dette.
En temmelig oppdatert oversikt over Sanitizer API-støtten til de nyeste testversjonene av flere nettlesere er tilgjengelig på denne siden.
Ny phishing-trussel: Skadevare kan stjele «alt» på datamaskinen din