Cross-site scripting (XSS)
Også kendt som: XSS
Et angreb, der smugler et skadeligt script ind på en webside, så det kører i browseren hos alle, der besøger siden.
Kladde - dette opslag er endnu ikke gennemgået.
Formelt
En fejl i en webapplikation, der sætter input udefra ind i sine sider uden først at gøre det ufarligt; webbrowseren kører så inputtet som kode med samme rettigheder som sitets egen kode og kan dermed læse, hvad brugeren ser, og handle i brugerens navn.
Forklaret enkelt
Som en opslagstavle, hvor nogen hænger en seddel op, der får den, der læser den højt, til at udlevere sine husnøgler - tavlen tjekker aldrig, hvad der bliver hængt op.
I praksis
En angriber skriver en kommentar med et skjult script på en kommunes høringsside; hver borger, der åbner siden, mens vedkommende er logget ind, giver uden at vide det angriberen sin session.
Hvorfor det betyder noget
Den skadelige kode kører inde på et site, som den besøgende stoler på, så browseren giver den adgang til den besøgendes session og data; det er fortsat en af de oftest rapporterede fejl i webapplikationer.
Teknisk uddybning
XSS inddeles efter, hvor payloaden ligger, og hvor den bliver til kode. Reflekteret XSS sender input fra den aktuelle forespørgsel (et søgeord, en fejlparameter) tilbage i svaret. Lagret XSS gemmer payloaden i applikationens data (kommentarer, profilfelter, supportsager) og serverer den for alle, der ser siden, og skalerer derfor bedst for angriberen; Samy-ormen på MySpace i 2005 spredte sig på den måde til over en million profiler. DOM-baseret XSS rører aldrig serverens HTML: JavaScript i klienten læser en kilde, angriberen styrer, fx location.hash eller postMessage-data, og skriver den ind i en farlig sink som innerHTML, document.write, eval eller en javascript:-URL. Mutation XSS (mXSS) udnytter forskellen på, hvordan en sanitizer parser markup, og hvordan browseren parser den igen efter serialisering.
Grundforsvaret er kontekstafhængig output-encoding: den samme værdi skal escapes forskelligt i HTML-brødtekst, i en attribut i anførselstegn, i en JavaScript-streng, i en CSS-værdi eller i en URL, og HTML-entity-encoding er ikke nok inde i en script-blok eller en event handler-attribut. Moderne templatemotorer og frameworks (React JSX, Angular, Razor, Thymeleaf) escaper automatisk, så XSS i praksis samler sig i nødudgangene som dangerouslySetInnerHTML, bypassSecurityTrustHtml, v-html og rå strengskabeloner. Skal der tages imod rig HTML, sendes den gennem en allowlist-baseret sanitizer som DOMPurify frem for et hjemmestrikket regulært udtryk.
Content Security Policy er det vigtigste ekstra forsvarslag. En streng CSP bruger nonces eller hashes pr. svar sammen med 'strict-dynamic' og forbyder inline event handlers, hvilket blokerer de fleste injicerede scripts, selv når encodingen har svigtet; domænebaserede allowlists omgås jævnligt via JSONP-endpoints og script gadgets på tilladte CDN'er. Trusted Types, som først kom i Chromium-baserede browsere, får DOM-sinks til at afvise almindelige strenge, så DOM-XSS bliver til en typefejl. HttpOnly-cookies forhindrer script i at læse sessionscookien, men ikke i at sende autentificerede forespørgsler i offerets navn, så de begrænser skaden uden at forhindre den.
XSS er katalogiseret som CWE-79. Det var en selvstændig kategori i OWASP Top 10 frem til 2017 (A7), blev lagt ind under Injection i 2021 (A03) og ligger stadig under Injection som A05 i 2025-udgaven. Inputvalidering hjælper på snævert typede felter, men kan ikke være den primære kontrol, fordi mange legitime værdier (navne som O'Brien, fritekst, markup i et CMS) indeholder netop de tegn, der betyder noget i en eller anden outputkontekst.
Hvad du bør lære først
Alt det, dette bygger på - grundlaget først.
- Netværk
- →IP-adresse
- →Protokol
- →Klient
- →Pakke
- →Port
- →Router
- →Server
- →TCP/IP
- →HTTP
- →Internettet
- →Webapplikation
- →Webbrowser
- →Cross-site scripting (XSS)
Relationer
- Forudsætter
- WebbrowserWebapplikation
- Forveksl ikke med
- SQL injectionCross-site request forgery (CSRF)
- Forårsager
- Sessionskapring
- Bruges sammen med
- OWASP Top 10
Kilder og videre læsning
Opslagsværker
Hvor dataene kommer fra
Dette opslag er skrevet af en AI ud fra kilderne ovenfor og er endnu ikke gennemgået af et menneske. Brug det som udgangspunkt, og tjek alt vigtigt mod kilderne.
Se gennemgangskøenForeslå en rettelse på GitHubDette begreb som JSON
Nævnt i
Test dig selv
Indlæser…