XSS i React: dangerouslySetInnerHTML och tredjepartsskript
Förstå hur Reacts standardskydd mot specialtecken förhindrar XSS, när dangerouslySetInnerHTML är farligt och hur tredjepartsskript skapar risker.
XSS i React: dangerouslySetInnerHTML och tredjepartsskript är en gratis lektion i React Academy på CoddyKit. Detta är lektion 1 av 4. Ni kan läsa hela lektionen gratis nedan och sedan öva praktiskt i webbläsaren med en inbyggd kodredigerare och en AI-handledare som är tillgänglig dygnet runt. Den ingår i lärvägen för React Academy, och Era framsteg synkroniseras mellan webben och CoddyKit-appen. Kursen i React Academy innehåller totalt 4 lektioner.
React inbyggda XSS-skydd
React escape:ar automatiskt alla värden som renderas via JSX innan de infogas i DOM:en. När Ni skriver {userInput} i JSX utför React motsvarande tilldelning till textContent — värdet behandlas som text, aldrig som HTML. Detta förhindrar som standard de flesta XSS-attacker i React-applikationer.
Vad dangerouslySetInnerHTML gör
dangerouslySetInnerHTML={{ __html: htmlString }} är Reacts undantag från säkerhetsmekanismen, som kringgår den automatiska escape-funktionen. Namnet är avsiktligt alarmerande: det visar att Ni själv ansvarar för HTML-strängens säkerhet. React anger innerHTML direkt och kör all HTML, inklusive skript och händelsehanterare.
Legitima användningsområden
Ni behöver faktiskt dangerouslySetInnerHTML när Ni renderar HTML från en rich text-editor (som TipTap eller Quill), ett CMS som lagrar HTML eller en Markdown-till-HTML-konverterare. Dessa källor producerar riktig HTML-markup som måste renderas som HTML, inte som escape:ad text.
Angreppsvägen
Om HTML-strängen innehåller <script>stealCookies()</script> eller <img src=x onerror="stealData()"> körs angriparens kod när strängen anges som innerHTML. Användarinnehåll som skickas direkt till dangerouslySetInnerHTML utan sanering är en kritisk XSS-sårbarhet.
DOMPurify: standardsaneraren
DOMPurify är branschstandard för HTML-sanering i webbläsare. Det tolkar HTML-strängen i en sandlådad kontext, tar bort farliga element och attribut (scripttaggar, on-event-hanterare och javascript:-URL:er) och returnerar en säker HTML-sträng. Användning: DOMPurify.sanitize(dirtyHtml) innan värdet skickas till dangerouslySetInnerHTML.
Risker med tredjepartsskript
Tredjepartsskript (analysverktyg, chattwidgetar och annonsnätverk) körs med samma behörigheter som applikationens JavaScript. Ett komprometterat eller skadligt tredjepartsskript kan läsa document.cookie, komma åt localStorage, läsa formulärfält och skicka begäranden till externa servrar — allt utan att användaren märker något.
Content Security Policy som försvarslager
Content Security Policy är en HTTP-header som anger vilka skript som får köras. Även om en XSS-payload injiceras i DOM:en kan en korrekt konfigurerad CSP blockera körningen genom att begränsa inline-skript och endast tillåta vitlistade skriptkällor. CSP är det andra försvarslagret efter sanering av indata.
Supply chain-attacker via npm
npm-paket utgör en verklig XSS-angreppsväg. Ett beroende kan innehålla skadlig kod som skickar miljövariabler eller användardata vidare. Incidenten med node-ipc 2022 och komprometteringen av ua-parser-js 2021 visade att vanligt använda paket kan tas över och förgiftas. Granska beroenden med npm audit och använd lockfiler.
Vad angripare gör med XSS
En lyckad XSS-attack gör det möjligt för en angripare att stjäla användarens JWT-token från sessionStorage (genom att skicka den till en server som angriparen kontrollerar), utföra åtgärder som den autentiserade användaren (API-anrop med användarens session), ändra DOM:en för att visa nätfiskeinnehåll eller logga varje tangenttryckning som användaren gör i applikationen.
API:t Trusted Types
Webbläsarens Trusted Types-API kräver att alla DOM-sänkor (innerHTML, eval, script.src) tar emot särskilda typade objekt i stället för råa strängar. Detta förhindrar att strängbaserade XSS-payloads når DOM:en på plattformsnivå. React arbetar med stöd för Trusted Types, och CSP kan framtvinga det.
Säkra mönster för CMS-innehåll
Det säkra mönstret för att rendera CMS-HTML är att hämta HTML-koden, skicka den genom DOMPurify.sanitize() med en allowlist över säkra taggar och attribut och sedan rendera den med dangerouslySetInnerHTML={{ __html: cleanHtml }}. Hoppa aldrig över saneringssteget, även om Ni litar på CMS:et, eftersom själva CMS-databasen kan ha komprometterats.
DOMPurifys syfte
Vad gör DOMPurify när Ni anropar DOMPurify.sanitize(htmlString)?
Lektionssammanfattning
React escape:ar automatiskt JSX-värden, vilket förhindrar de flesta XSS-attacker. dangerouslySetInnerHTML kringgår detta för legitim HTML-rendering — sanera alltid indata med DOMPurify först. Tredjepartsskript och komprometterade npm-paket är XSS-angreppsvägar i leveranskedjan. Content Security Policy tillhandahåller ett andra försvarslager. En lyckad XSS-attack möjliggör stöld av token, identitetskapning och nätfiske.
Lär dig React med en AI-lärare – gratis
Skriv och kör riktig kod i webbläsaren, få omedelbar hjälp av en AI-lärare dygnet runt och fortsätt där du slutade – på webben eller i appen.
- Kurser
- 88
- Lektioner
- 324
Vanliga frågor
Är lektionen ”XSS i React: dangerouslySetInnerHTML och tredjepartsskript” gratis?
Ja – hela texten till ”XSS i React: dangerouslySetInnerHTML och tredjepartsskript” kan läsas gratis här på webben. Om Ni vill öva interaktivt med en inbyggd kodredigerare och en AI-handledare som är tillgänglig dygnet runt och låsa upp resten av kursen i React Academy, kan Ni uppgradera till CoddyKit PRO. Kursen i React Academy innehåller totalt 4 lektioner.
Vad lär jag mig i ”XSS i React: dangerouslySetInnerHTML och tredjepartsskript”?
Förstå hur Reacts standardskydd mot specialtecken förhindrar XSS, när dangerouslySetInnerHTML är farligt och hur tredjepartsskript skapar risker. Ni övar på React Academy med praktisk kod som körs direkt i webbläsaren, medan en AI-handledare som är tillgänglig dygnet runt svarar på Era frågor under lektionen.
Behöver jag någon erfarenhet för att börja lära mig React Academy?
Du behöver inga förkunskaper. Utbildningen i React Academy på CoddyKit är upplagd för allt från nybörjare till avancerade elever, så att du kan börja här eller från början och gå fram i din egen takt. Detta är lektion 1 av 4.
Hur lång tid tar lektionen ”XSS i React: dangerouslySetInnerHTML och tredjepartsskript”?
De flesta CoddyKit-lektioner tar cirka 5–10 minuter. Varje lektion är kort och interaktiv, så att du gör stadiga framsteg och kan fortsätta precis där du slutade – på webben eller i appen.
Kan jag skriva och köra kod i den här React Academy-lektionen?
Ja. Varje React Academy-lektion innehåller en inbyggd kodredigerare, så att du kan skriva och köra riktig kod direkt i webbläsaren och få omedelbar AI-feedback – utan lokal installation.
Alla lektioner i den här kursen
- XSS i React: dangerouslySetInnerHTML och tredjepartsskript
- CSRF-skydd i React- och API-konfigurationer
- Content Security Policy för React-appar
- Hantering av hemligheter och miljövariabler