React Academy · Les

XSS in React: dangerouslySetInnerHTML en scripts van derden

Begrijp hoe React's standaard escaping XSS voorkomt, wanneer dangerouslySetInnerHTML gevaarlijk is en hoe scripts van derden risico's introduceren.

Les 1 van 413 stappen

XSS in React: dangerouslySetInnerHTML en scripts van derden is een gratis React Academy-les op CoddyKit. Dit is les 1 van 4. Je kunt de volledige les hieronder gratis lezen en daarna in de browser praktisch oefenen met een ingebouwde code-editor en een AI-begeleider die 24/7 beschikbaar is. Deze les maakt deel uit van het leertraject React Academy. Je voortgang wordt gesynchroniseerd op het web en in de CoddyKit-app. De cursus React Academy bevat in totaal 4 lessen.

Ingebouwde XSS-bescherming van React

React zet alle waarden die via JSX worden weergegeven automatisch om naar veilige tekst voordat ze in de DOM worden geplaatst. Wanneer je {userInput} in JSX schrijft, voert React het equivalent uit van een toewijzing aan textContent: de waarde wordt als tekst behandeld en nooit als HTML. Hierdoor voorkomt React standaard het merendeel van de XSS-aanvallen in React-toepassingen.

Wat dangerouslySetInnerHTML doet

dangerouslySetInnerHTML={{ __html: htmlString }} is het omzeilingsmechanisme van React waarmee de automatische ontsnapping wordt overgeslagen. De naam is bewust alarmerend: hij maakt duidelijk dat je zelf verantwoordelijk bent voor de veiligheid van de HTML-tekenreeks. React stelt innerHTML rechtstreeks in, waardoor alle HTML wordt uitgevoerd, inclusief scripts en gebeurtenisafhandelaars.

Geldige toepassingen

Je hebt dangerouslySetInnerHTML echt nodig wanneer je HTML weergeeft die afkomstig is van een editor voor opgemaakte tekst, zoals TipTap of Quill, van een CMS dat HTML opslaat of van een omzetter van Markdown naar HTML. Deze bronnen leveren echte HTML-markeringen die als HTML moeten worden weergegeven en niet als ontsnapte tekst.

De aanvalsvector

Als de HTML-tekenreeks <script>stealCookies()</script> of <img src=x onerror="stealData()"> bevat, voert het instellen ervan als innerHTML de code van de aanvaller uit. Alle inhoud van gebruikers die zonder opschoning rechtstreeks aan dangerouslySetInnerHTML wordt doorgegeven, vormt een kritieke XSS-kwetsbaarheid.

DOMPurify: de standaard voor opschoning

DOMPurify is de industriestandaard voor het opschonen van HTML in browsers. Het analyseert de HTML-tekenreeks in een afgeschermde context, verwijdert gevaarlijke elementen en attributen (scripttags, gebeurtenisafhandelaars en javascript:-URL's) en retourneert een veilige HTML-tekenreeks. Gebruik DOMPurify.sanitize(dirtyHtml) voordat je de waarde aan dangerouslySetInnerHTML doorgeeft.

Risico's van scripts van derden

Scripts van derden, zoals analysescripts, chatwidgets en advertentienetwerken, draaien met dezelfde rechten als de JavaScript van je toepassing. Een gecompromitteerd of kwaadaardig script van derden kan document.cookie lezen, toegang krijgen tot localStorage, formulierinvoer lezen en verzoeken naar externe servers sturen — allemaal zonder dat de gebruiker daar iets van merkt.

Content Security Policy als verdedigingslaag

Content Security Policy is een HTTP-header die vastlegt welke scripts mogen worden uitgevoerd. Zelfs als XSS-aanvalscode in de DOM wordt geïnjecteerd, kan een goed geconfigureerde CSP de uitvoering ervan blokkeren door scripts in de pagina te beperken en alleen toegestane scriptbronnen toe te staan. CSP is de tweede verdedigingslaag na het opschonen van invoer.

Aanvallen op de toeleveringsketen via npm

npm-pakketten vormen een reële XSS-aanvalsvector. Een afhankelijkheid kan kwaadaardige code bevatten die omgevingsvariabelen of gebruikersgegevens buitmaakt. Het node-ipc-incident uit 2022 en het gecompromitteerde ua-parser-js-pakket uit 2021 lieten zien dat veelgebruikte pakketten kunnen worden overgenomen en besmet. Controleer afhankelijkheden met npm audit en gebruik vergrendelingsbestanden.

Wat aanvallers met XSS kunnen doen

Een geslaagde XSS-aanval stelt een aanvaller in staat het JWT-token van de gebruiker uit diens sessionStorage te stelen en naar een server te sturen die door de aanvaller wordt beheerd, handelingen uit te voeren als de geauthenticeerde gebruiker (API-aanroepen met de sessie van de gebruiker), de DOM aan te passen om phishinginhoud weer te geven of elke toetsaanslag van de gebruiker in de toepassing te registreren.

De Trusted Types-API

De Trusted Types-browser-API vereist dat alle DOM-invoegpunten (innerHTML, eval, script.src) speciale objecten met een type ontvangen in plaats van onbewerkte tekenreeksen. Hierdoor wordt voorkomen dat XSS-aanvalscode op platformniveau de DOM bereikt. React werkt aan ondersteuning voor Trusted Types en CSP kan dit afdwingen.

Veilige patronen voor CMS-inhoud

Het veilige patroon voor het weergeven van CMS-HTML is als volgt: haal de HTML op, stuur die door DOMPurify.sanitize() met een toestaanlijst van veilige elementen en attributen en geef de uitkomst vervolgens weer met dangerouslySetInnerHTML={{ __html: cleanHtml }}. Sla de opschoningsstap nooit over, zelfs niet als je het CMS vertrouwt, want ook de CMS-database zelf kan worden gecompromitteerd.

Doel van DOMPurify

Wat doet DOMPurify wanneer je DOMPurify.sanitize(htmlString) aanroept?

Samenvatting van de les

React zet JSX-waarden automatisch om naar veilige tekst, waardoor de meeste XSS-aanvallen worden voorkomen. dangerouslySetInnerHTML omzeilt dit voor legitieme HTML-weergave — ontsmet de invoer altijd eerst met DOMPurify. Scripts van derden en gecompromitteerde npm-pakketten vormen XSS-aanvallen via de toeleveringsketen. Content Security Policy biedt een tweede verdedigingslaag. Een geslaagde XSS-aanval maakt het mogelijk tokens te stelen, zich voor iemand anders uit te geven en phishing uit te voeren.

Gratis beginnen

Leer React met een AI-tutor — gratis

Schrijf echte code en voer die uit in je browser, krijg direct hulp van een AI-tutor die 24/7 beschikbaar is en ga verder waar je gebleven bent op het web of in de app.

Cursussen
88
Lessen
324

Veelgestelde vragen

Is de les “XSS in React: dangerouslySetInnerHTML en scripts van derden” gratis?

Ja — de volledige tekst van “XSS in React: dangerouslySetInnerHTML en scripts van derden” kun je hier gratis op het web lezen. Als je interactief wilt oefenen met een ingebouwde code-editor en een AI-begeleider die 24/7 beschikbaar is, en de rest van de cursus React Academy wilt ontgrendelen, kun je upgraden naar CoddyKit PRO. De cursus React Academy bevat in totaal 4 lessen.

Wat leer ik in “XSS in React: dangerouslySetInnerHTML en scripts van derden”?

Begrijp hoe React's standaard escaping XSS voorkomt, wanneer dangerouslySetInnerHTML gevaarlijk is en hoe scripts van derden risico's introduceren. Je oefent met React Academy door code rechtstreeks in de browser uit te voeren. Een AI-begeleider die 24/7 beschikbaar is beantwoordt je vragen terwijl je de les doorwerkt.

Heb ik ervaring nodig om met React Academy te beginnen?

Ervaring vooraf is niet nodig. React Academy op CoddyKit is opgebouwd voor beginners tot gevorderden, zodat je hier of bij het begin kunt starten en in je eigen tempo kunt leren. Dit is les 1 van 4.

Hoe lang duurt de les “XSS in React: dangerouslySetInnerHTML en scripts van derden”?

De meeste lessen van CoddyKit duren ongeveer 5–10 minuten. Elke les is kort en interactief, zodat je gestaag vooruitgaat en op het web en in de app precies verdergaat waar je was gebleven.

Kan ik code schrijven en uitvoeren in deze les over React Academy?

Ja. Elke les over React Academy bevat een ingebouwde code-editor, zodat je rechtstreeks in je browser echte code kunt schrijven en uitvoeren en direct feedback van AI krijgt — lokale installatie is niet nodig.

Alle lessen in deze cursus

  1. XSS in React: dangerouslySetInnerHTML en scripts van derden
  2. CSRF-bescherming in React- en API-setups
  3. Content Security Policy voor React-apps
  4. Beheer van geheimen en omgevingsvariabelen
← Terug naar React Academy