
Hoe voorkomt u cross-site scripting-aanvallen (XSS)?
Leer hoe u XSS-aanvallen voorkomt, kwetsbaarheden vindt en sluimerende dreigingen wegneemt. Deze gids behandelt de basisprincipes van het voorkomen van cross-site scripting-aanvallen.

Na de recent ontdekte kwetsbaarheden voor cross-site scripting (XSS) hebben de FBI en CISA hun beveiligingsmaatregelen aangescherpt en zich gericht op het verbeteren van de cyberweerbaarheid. Toch pakken organisaties de basis vaak niet aan, en zo ontstaan datalekken.
Cross-site scripting-aanvallen ontstaan wanneer webapps en -diensten verzoeken of invoer niet goed verwerken, of niet werken zoals bedoeld. Ze zijn gevaarlijk omdat ze niet alleen apps treffen, maar ook de gebruikers ervan.
Deze gids behandelt cross-site scripting-aanvallen en alles wat u erover moet weten.
Wat zijn cross-site scripting-aanvallen (XSS)?
Geen enkele app of website is perfect; er zijn verborgen fouten. Cross-site scripting-aanvallen maken hier misbruik van door schadelijke code te versturen die apps of websites ontregelt. Daardoor kan een aanvaller de identiteit van een slachtoffer overnemen en zich zelfs als die persoon voordoen.
Het schadelijke script schuilt in de webapp en is daardoor moeilijk te ontdekken. Het gaat op in de broncode van de app, waardoor diensten niet kunnen controleren of het uit een niet-vertrouwde bron komt. Wat is het gevolg?
Hackers krijgen toegang tot cookies, websitetokens en andere gevoelige gegevens die uw webbrowser verzamelt. Als uw website of app content naar andere locaties levert, kan die ook worden onderschept. Ook online forums en prikborden waar gebruikers op berichten kunnen reageren, zijn hiervoor kwetsbaar.
Soorten cross-site scripting-aanvallen (XSS)
XSS-kwetsbaarheden hebben in het verleden de verspreiding van wormen mogelijk gemaakt en de beveiliging van applicaties ondermijnd. Ze kunnen malware verspreiden, inloggegevens via phishing buitmaken en defensiewebsites kapen.
Er zijn drie hoofdtypen cross-site scripting-aanvallen (XSS). Voordat u leert hoe u XSS-aanvallen voorkomt, moet u weten met welke dreigingen u te maken hebt. Dit zijn ze.
1. Opgeslagen XSS (persistente XSS)
Dit is een van de eenvoudigste, maar gevaarlijkste vormen van XSS. Bij opgeslagen XSS wordt schadelijke code in webdatabases opgeslagen doordat invoervalidatie ontbreekt. De aanvaller injecteert de code via een kwetsbaarheid in een webapp en slaat deze permanent op. Het slachtoffer kan het script ongemerkt uitvoeren wanneer de payload als HTML-code aan de webbrowser wordt geleverd. Zodra het slachtoffer de webpagina laadt en daarmee het schadelijke script uitvoert, is het kwaad geschied.
Een klassiek voorbeeld is een reactie onder een blogbericht. De aanvaller kan een URL toevoegen en het slachtoffer ertoe verleiden erop te klikken en de reactie te lezen. Wanneer de gebruiker ermee interacteert, wordt de code automatisch uitgevoerd.
2. Gereflecteerde XSS (niet-persistente XSS)
Wanneer de payload van een aanvaller onderdeel wordt van een antwoord aan de webbrowser, ontstaat een gereflecteerde XSS-aanval. Het verzoek wordt teruggekaatst, zodat het HTTP-antwoord de payload uit het HTTP-verzoek bevat. Hackers kunnen een combinatie van social engineering, schadelijke links en andere phishingtactieken gebruiken om slachtoffers te verleiden serververzoeken te doen. De beperking van deze techniek is dat de aanvaller elk slachtoffer afzonderlijk een payload moet sturen. Payloads kunnen niet in één keer op grote schaal worden verspreid; de meeste gereflecteerde XSS-aanvallen vinden plaats via sociale netwerken.
3. DOM-gebaseerde XSS
Bij DOM-gebaseerde XSS worden gebruikersaccounts gehackt met schadelijke Javascript-code uit een bron die de aanvaller beheerst. De code wordt doorgegeven aan een sink die deze dynamisch uitvoert en het codeblok naar believen laat draaien. De browser-URL is de meest voorkomende bron voor deze cross-site scripting-aanvallen. De aanvaller voegt ook een link toe die slachtoffers naar kwetsbare pagina's leidt met payloads in querystrings. De aanvaller kan daarnaast delen van de URL opsplitsen en slachtoffers verder misleiden door ze verkeerd door te verwijzen.
Hoe werkt cross-site scripting (XSS)?
Bij cross-site scripting manipuleren aanvallers kwetsbare websites om gebruikers schadelijke JavaScript-code te leveren. Als een aanvaller schadelijke code injecteert en deze in de browser van het slachtoffer uitvoert, kan die de applicaties van het slachtoffer en alle daaropvolgende interacties volledig compromitteren.
Cross-origin iframes staan gebruikers niet toe de alert-functie aan te roepen. Ze worden gebruikt bij sommige geavanceerdere XSS-aanvallen. De aanvaller kan ook de controle krijgen over rechten en gebruikerstoegang binnen webapps en de daarin opgeslagen gegevens bemachtigen.
Cross-site scripting-aanvallen en -kwetsbaarheden kunnen een aanvaller in staat stellen de identiteit van het slachtoffer over te nemen en zich op het hele netwerk als die persoon voor te doen. Aanvallers kunnen het same-origin-beleid omzeilen. Ze kunnen verschillende websites volledig van elkaar scheiden.
Hier volgt een vereenvoudigd overzicht van hoe een cross-site scripting-aanval werkt:
- De aanvaller stuurt u een schadelijke link. Wanneer u erop klikt, wordt de code geïnjecteerd en wordt de dynamische content aan de webbrowser geleverd.
- Er wordt een HTTP-verzoek naar de webserver van de aanvaller gestuurd. De aanvaller kan vervolgens uw gestolen cookies gebruiken om zich als u voor te doen.
- De aanvaller kan toegang krijgen tot gevoelige informatie en geavanceerdere social engineering-aanvallen uitvoeren.
- Met cross-site scripting-aanvallen kunnen aanvallers het same-origin-beleid omzeilen dat verschillende websites van elkaar moet scheiden. Deze aanvallen kunnen ingrijpend zijn en de reputatie van uw bedrijf schaden. De aanvaller kan uw organisatie in diskrediet brengen door de content te wijzigen en het imago van het bedrijf te beschadigen.
- Aanvallers kunnen desinformatie verspreiden, gebruikersinstructies op uw websites wijzigen en gebruikers misleiden.
XSS-aanvallen zijn gevaarlijk, vooral wanneer ze gericht zijn op overheidsinstanties, zorginstellingen of organisaties die tijdens crises essentiële voorzieningen leveren.
Hoe voorkomt u cross-site scripting-aanvallen (XSS)?
U kunt verschillende maatregelen nemen. Lees hoe u cross-site scripting-aanvallen voorkomt:
- Valideer invoer in webapps en -diensten om cross-site scripting-aanvallen (XSS) te voorkomen. Gebruik ook een kwetsbaarheidsscanner om uw websites op andere beveiligingskwetsbaarheden te controleren. Dat is een van de beste manieren om XSS-aanvallen automatisch te voorkomen.
- Een tweede manier om XSS-aanvallen te voorkomen, is gegevens bij uitvoer te encoderen. Doe dit bij voorkeur voordat u de gegevens op een pagina plaatst. Welke codering u nodig hebt, hangt af van de context waarin u de gegevens gebruikt.
- JavaScript-tekenreekswaarden vereisen bijvoorbeeld een andere codering dan waarden in een HTML-context. In een HTML-context moet u waarden die niet op een toestemmingslijst staan, omzetten naar HTML-entiteiten. In een JavaScript-tekenreeks moet u niet-alfanumerieke waarden escapen met Unicode.
- Mogelijk zijn meerdere coderingslagen nodig, die u in de juiste volgorde moet toepassen. U moet gebruikersinvoer in eventhandlers opnemen en rekening houden met HTML- en JavaScript-contexten. Invoer kan op verschillende manieren bij ontvangst worden gevalideerd.
- Als een gebruiker bijvoorbeeld een URL indient die in een antwoord wordt teruggegeven, kunt u controleren of die begint met een veilig protocol zoals HTTPS of HTTP. U kunt ook controleren of een waarde die een gebruiker opgeeft uit letters of cijfers bestaat. Daarnaast kunt u invoer beperken tot een verwachte reeks tekens.
U kunt ook deze maatregelen nemen:
- Maak een lijst van alle veilige protocollen die op uw website zijn toegestaan. Uw beveiliging blokkeert dan standaard schadelijke protocollen die niet op de lijst staan. Zo voorkomt u dat XSS-aanvallen ongeldige waarden verhullen om blokkeerlijsten te omzeilen.
- Gebruikers zouden geen HTML-markup mogen plaatsen, maar soms is dat nodig. Met toestemmingslijsten kunt u schadelijke tags uitfilteren. Veilige tags blijven behouden en schadelijke code die bij geblokkeerde tags hoort, wordt uitgefilterd. Tags die niet op uw toestemmingslijsten staan, worden als geblokkeerd beschouwd, tenzij u anders aangeeft.
- Houd beveiligingsupdates voor uw website in de gaten. Als u JavaScript-bibliotheken wilt gebruiken om rechtstreeks in de browser van de gebruiker te filteren en te encoderen, kunt u XSS-aanvallen ook voorkomen met een server-side template-engine. Die kan dynamische content in HTML opnemen en specifieke code definiëren.
- U kunt ook filters met argumenten gebruiken en de context definiëren. Daarmee voorkomt u de meeste XSS-aanvallen. Controleer deze escapefuncties regelmatig om te beoordelen of u de template-engine of het framework wilt blijven gebruiken.
- PHP heeft ook ingebouwde functies om entiteiten te encoderen. Daarmee kunt u invoer escapen wanneer uw waarden in een HTML-context staan. U kunt deze functies met drie argumenten aanroepen en moet invoer met Unicode escapen. PHP biedt geen API's om tekenreeksen met Unicode te escapen.
- Zet uw tekenreeksen om naar HTML-entiteiten en roep daarna de functies aan. Met een eigen HTML-encoder kunt u XSS-aanvallen via JavaScript aan de clientzijde voorkomen.

Verbeter uw informatie over bedreigingen
Bekijk hoe de SentinelOne service WatchTower voor het opsporen van bedreigingen meer inzichten kan opleveren en u kan helpen aanvallen te slim af te zijn.
Cross-site scripting-aanvallen (XSS): preventietips en best practices
Dit zijn de beste maatregelen om XSS-aanvallen te voorkomen:
- Schoon gebruikersinvoer en uitvoergegevens op met behulp van codering.
- U kunt speciale tekens vervangen door gecodeerde waarden, zodat alle gegevens als tekst worden verwerkt in plaats van als code. Aanvallers kunnen geen kwaadaardig script injecteren als ze alleen met platte tekst werken. Als u de codering correct toepast, worden gebruikers op die manier niet getroffen.
- U kunt verschillende soorten codering toepassen, afhankelijk van de bedrijfslogica of het type applicatie en van de gegevens die worden opgeslagen en verwerkt. Er zijn verschillende coderingsmethoden, zoals het coderen van HTML-entiteiten, een van de meest basale maatregelen. U kunt ook attribuutwaarden coderen.
- Een andere goede manier om XSS-aanvallen te voorkomen, is gegevens te filteren die aan de clientzijde worden ontvangen. Door gegevens te filteren verwijdert u gevaarlijke elementen, zoals tags, HTML-eventhandlers en kwaadaardige JavaScript-elementen.
- U kunt antwoorden van webpagina's terugsturen met een combinatie van invoer- en uitvoerfiltering. Deze methode beperkt vooral het risico op opgeslagen XSS-aanvallen.
- Het valideren van gebruikersinvoer is een andere beveiligingsmaatregel. Als u invoervelden standaard instelt op tekstgegevens, kunnen gebruikers bijvoorbeeld geen getallen invoeren. Dit werkt goed voor webformulieren; u kunt invoer valideren om te voorkomen dat aanvallers via autorisatie kwaadaardige scripts uploaden. Webbrowsers geven alleen toegang tot toegestane bronnen en negeren alle andere domeinen. Geïnjecteerde scripts worden niet uitgevoerd, zelfs niet als een aanvaller kwetsbaarheden voor XSS-injectie ontdekt.
- Om cross-site scripting-aanvallen in jQuery te voorkomen, kunt u gebruikersinvoer doorgeven aan een jQuery-selector. De gebruikelijkste manier om dit te doen, is location. Hash te gebruiken en de selector door te geven om HTML te renderen. jQuery kan het probleem herkennen en de selectorlogica aanpassen om te controleren of invoer met een hash begint.
- U kunt bronnen opgeven, zoals afbeeldingen en scripts, die vanuit de herkomst van de site mogen worden geladen. Als een aanvaller XSS-payloads injecteert, kan die geen bronnen laden die buiten de huidige herkomst vallen. De jQuery-selector kan de kans op een XSS-aanval of -kwetsbaarheid aanzienlijk verkleinen.
Als u niet-vertrouwde gegevens aan uw jQuery-selectors wilt doorgeven, zorg er dan voor dat u waarden correct escapt met de js—escape-functie. U kunt XSS-aanvallen ook beperken met content security policies. Daarmee beheert u verschillende aspecten van externe scripts, zoals het laden ervan en het uitvoeren van inline scripts.
Veelvoorkomende voorbeelden van XSS-aanvallen
Dit zijn enkele praktijkvoorbeelden van XSS-aanvallen:
- British Airways werd in 2018 getroffen door MageCart, een bekende hackersgroep. De groep misbruikte een XSS-kwetsbaarheid in de JavaScript-bibliotheek. Klantgegevens werden verzonden naar een kwaadaardige server met een domeinnaam die leek op die van de officiële website. Uiteindelijk onderschepten ze creditcardgegevens bij meer dan 380.000 boekingen, wat de luchtvaartmaatschappij veel geld kostte voordat het datalek werd ontdekt.
- Fornite is een populair online multiplayer-spel dat werd getroffen door een XSS-aanval. Een onveilige SSO-kwetsbaarheid leidde gebruikers om naar een vervalste inlogpagina, waar hun gegevens werden gestolen. Spelers verloren ook virtuele valuta in het spel en opgenomen chats tussen spelers werden gelekt.
- eBay had een XSS-kwetsbaarheid waardoor aanvallers volledige toegang kregen tot verkopersaccounts. De aanvallers manipuleerden de positie van aanbiedingen op eBay en zetten hun aanvallen voort, zelfs nadat eBay de kwetsbaarheid had ontdekt en verholpen.
Conclusie
Cross-site scripting-aanvallen behoren tot de ernstigste bedreigingen voor webbeveiliging. Ze ondermijnen het vertrouwen in online platforms en brengen gebruikersgegevens in gevaar. Door de soorten XSS-aanvallen te kennen en de juiste preventiemaatregelen toe te passen, kunnen ontwikkelaars hun applicaties beveiligen. Passende maatregelen zijn onder meer invoervalidatie, uitvoercodering en het toepassen van content security policies.
Beveiligingsaudits en geavanceerde tools voor dreigingsdetectie zijn essentieel voor een veilige online aanwezigheid. Naarmate de technologie zich ontwikkelt, veranderen ook de werkwijzen van aanvallers. Waakzaamheid blijft daarom cruciaal. Door XSS-preventie prioriteit te geven, beschermen organisaties hun reputatie en waarborgen ze de integriteit van hun online aanwezigheid.
Veelgestelde vragen
Bij XSS-aanvallen worden kwaadaardige scripts in websites geïnjecteerd, zodat hackers toegang krijgen tot gevoelige gebruikersgegevens. XSS-aanvallen misbruiken kwetsbaarheden in webapplicaties en maken vaak gebruik van gebruikersinvoer of gemanipuleerde URL's.
Ontwikkelaars kunnen XSS-aanvallen voorkomen door gebruikersinvoer te controleren, uitvoergegevens te coderen en alleen kwaadaardige scripts toe te staan. Periodieke beveiligingsaudits en content security policies verkleinen ook de risico's.
XSS-aanvallen misbruiken webapplicaties door kwaadaardige scripts te injecteren. Die worden uitgevoerd in de browsers van gebruikers, omzeilen beveiligingsmaatregelen en geven toegang tot gevoelige informatie.
XSS moet worden voorkomen omdat het kan leiden tot datalekken, financiële verliezen en reputatieschade. Het schaadt ook het vertrouwen van gebruikers en kan worden ingezet om malware te verspreiden of phishingaanvallen uit te voeren.
Hiertoe behoren kwetsbaarheidsscanners, firewalls voor webapplicaties en geavanceerde systemen voor dreigingsdetectie. Ze detecteren kwetsbaarheden en blokkeren de uitvoering van kwaadaardige scripts.
Ja. Een WAF kan XSS-aanvallen blokkeren door verkeer te filteren en kwaadaardige scripts te herkennen voordat ze met de applicatie kunnen communiceren.
Bij het testen op XSS worden kwetsbaarheidsscanners en penetratietesttools gebruikt om aanvallen te simuleren en mogelijke toegangspunten voor kwaadaardige scripts te vinden.
Om bescherming te bieden tegen veranderende dreigingen, moeten beveiligingsscans op XSS-kwetsbaarheden regelmatig worden uitgevoerd, idealiter elke drie maanden.




