Na de recente kwetsbaarheden op het gebied van cross-site scripting (XSS) hebben de FBI en CISA onlangs hun beveiligingsmaatregelen verscherpt en zich gericht op het verbeteren van de cyberweerbaarheid. Het is niet verwonderlijk dat organisaties vaak nalaten om de basisprincipes toe te passen, en zo ontstaan er datalekken.
Cross-site scripting-aanvallen vinden plaats wanneer webapps en -diensten verzoeken of invoer niet kunnen verwerken of niet functioneren zoals bedoeld. Ze zijn gevaarlijk omdat ze niet alleen gericht zijn op apps, maar ook op de gebruikers erachter.
Hier vindt u een gids over cross-site scripting-aanvallen en alles wat u over dit onderwerp moet weten.

Wat zijn Cross-Site Scripting (XSS)-aanvallen?
Geen enkele app of website is perfect; er zijn altijd verborgen gebreken. Cross-site scripting-aanvallen maken hiervan gebruik door kwaadaardige code te verzenden om ze te laten storen. Door deze aanvallen kan een kwaadwillende actor de identiteit van een slachtoffer overnemen en zich zelfs voordoen als deze persoon.
Het kwaadaardige script ligt op de loer in de webapp en is dus niet gemakkelijk te detecteren. Het gaat op in de broncode van de app, waardoor het voor diensten onmogelijk is om te controleren of het afkomstig is van onbetrouwbare bronnen. Wat is het resultaat?
Hackers krijgen toegang tot cookies, sitetokens en andere gevoelige gegevens die door uw webbrowser worden verzameld. Als uw website of app inhoud naar verschillende plaatsen verzendt, wordt deze ook automatisch onderschept. Online forums en gebruikersprikborden waar u reacties onder berichten kunt achterlaten, zijn hier ook vatbaar voor.
Soorten cross-site scripting (XSS)-aanvallen
XSS-kwetsbaarheden hebben in het verleden wormen gecreëerd en de beveiligingsmaatregelen van applicaties ondermijnd. Ze kunnen malware verspreiden, inloggegevens phishen en defensiewebsites kapen.
Er zijn drie hoofdtypen cross-site scripting (XSS)-aanvallen. Voordat u leert hoe u XSS-aanvallen kunt voorkomen, moet u weten met welke bedreigingen u te maken hebt. Deze zijn als volgt.
1. Opgeslagen XSS (persistent XSS)
Dit is een van de meest basale maar gevaarlijke vormen van XSS. Opgeslagen XSS verwijst naar kwaadaardige code die is opgeslagen in webdatabases wanneer er geen invoervalidatie plaatsvindt. De aanvaller injecteert de code via een kwetsbaarheid in een webapp en slaat deze permanent op. Het slachtoffer kan het script zonder het te weten uitvoeren, waarna een payload als HTML-code naar hun webbrowser wordt gestuurd. Zodra ze het kwaadaardige script uitvoeren door de webpagina te laden, is het gebeurd.
Een klassiek voorbeeld hiervan is een reactie op een blogpost. De aanvaller kan een URL toevoegen en het slachtoffer ertoe brengen de reactie te lezen door erop te klikken. Wanneer de gebruiker interactie heeft, wordt de code automatisch door hem uitgevoerd.
2. Reflected XSS (niet-persistente XSS)
Wanneer de payload van een aanvaller onderdeel wordt van een payload die naar de webbrowser wordt gestuurd, verandert deze in een gereflecteerde XSS-aanval. Het verzoek kaatst terug van de browser, zodat het HTTP-antwoord de payload van het HTTP-verzoek bevat. Hackers kunnen een combinatie gebruiken van social engineering bedreigingen, kwaadaardige links en andere phishing scam tactieken om slachtoffers te verleiden tot het doen van serververzoeken. Het enige nadeel van deze techniek is dat de aanvaller individuele payloads afzonderlijk aan slachtoffers moet leveren. Ze kunnen geen payloads massaal leveren; de meeste gereflecteerde XSS-aanvallen worden uitgevoerd op sociale medianetwerken.
3. DOM-gebaseerde XSS
Bij DOM-gebaseerde XSS worden gebruikersaccounts gehackt door kwaadaardige JavaScript-code te gebruiken uit een bron die de aanvaller kan controleren. Deze code wordt doorgegeven aan een sink die deze dynamisch uitvoert en het blok willekeurig uitvoert. De URL van de browser is de meest voorkomende bron voor deze cross-site scripting-aanvallen. De aanvaller voegt ook een link toe om slachtoffers naar kwetsbare pagina's te sturen met payloads ingebed in query strings. Ze kunnen ook delen van de URL fragmenteren en slachtoffers verder manipuleren door ze om te leiden.
Hoe werkt cross-site scripting (XSS)?
Cross-site scripting werkt door kwetsbare websites te manipuleren en kwaadaardige JavaScript-code terug te sturen naar gebruikers. Wanneer de aanvaller kwaadaardige code injecteert en deze uitvoert vanuit de browser van het slachtoffer, kan hij hun applicaties en alle interacties die daaruit voortvloeien volledig compromitteren.
Cross-origin iframes staan gebruikers niet toe om de waarschuwingsfunctie aan te roepen. Ze worden gebruikt om een aantal van de meer geavanceerde XSS-aanvallen uit te voeren. De aanvaller kan ook controle krijgen over privileges en gebruikerstoegang binnen webapps en de gegevens die daarin zijn opgeslagen in beslag nemen.
Cross-site scripting-aanvallen en kwetsbaarheden kunnen de aanvaller in staat stellen zich voor te doen als het slachtoffer en zich als zodanig te gedragen in het hele netwerk. Ze kunnen oorsprongsbeleid 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 kwaadaardige link. Wanneer u hierop klikt, wordt de code geïnjecteerd en wordt de dynamische inhoud naar de webbrowser gestuurd.
- Er wordt een HTTP-verzoek naar de webserver van de aanvaller gestuurd. De kaper kan vervolgens uw gestolen cookies gebruiken om zich voor te doen als u.
- Ze kunnen toegang krijgen tot gevoelige informatie en geavanceerdere social engineering-aanvallen uitvoeren.
- Met cross-site scripting-aanvallen kunnen aanvallers het same-origin-beleid omzeilen dat is ontworpen om verschillende websites gescheiden te houden. Deze aanvallen zijn brutaal en kunnen de reputatie van uw bedrijf schaden. De tegenstander kan uw organisatie in diskrediet brengen door de inhoud ervan te wijzigen en het imago van het bedrijf te schaden of te bezoedelen.
- Ze kunnen verkeerde informatie verspreiden, gebruikersinstructies op uw websites wijzigen en gebruikers misleiden.
XSS-aanvallen zijn gevaarlijk, vooral als ze gericht zijn op overheidsinstanties, zorginstellingen of bedrijven die tijdens crises essentiële middelen leveren.
Hoe kunt u cross-site scripting (XSS)-aanvallen voorkomen?
U kunt verschillende benaderingen volgen. Lees hieronder meer over hoe u cross-site scripting-aanvallen kunt voorkomen:
- Het valideren van invoer in webapps en -services kan cross-site scripting-aanvallen (XSS) helpen voorkomen. U kunt ook een kwetsbaarheidsscanner gebruiken om uw websites te controleren op andere beveiligingskwetsbaarheden. Dit is een van de beste manieren om te weten hoe u (XSS)-aanvallen automatisch kunt voorkomen.
- De tweede manier om XSS-aanvallen te voorkomen, is door gegevens bij de uitvoer te coderen. Dit moet idealiter gebeuren voordat u uw gegevens op een pagina schrijft. Het type codering dat u moet gebruiken, is afhankelijk van de context waarin u schrijft.
- JavaScript-tekenreekswaarden hebben bijvoorbeeld een ander type codering nodig dan waarden in een HTML-context. In een HTML-context moet u waarden die niet op de witte lijst staan, omzetten in HTML-entiteiten. Maar in een JavaScript-stringcontext moet u zorgen voor Unicode-escaping voor niet-alfanumerieke waarden.
- Er kunnen meerdere coderingslagen nodig zijn en dit proces moet in de juiste volgorde worden toegepast. U moet uw gebruikersinvoer in gebeurtenishandlers insluiten en omgaan met HTML- en JavaScript-contexten. Er zijn tal van manieren om invoer bij aankomst te valideren.
- Als een gebruiker bijvoorbeeld een URL indient en deze wordt teruggestuurd in een antwoord, kunt u deze valideren door te beginnen met een veiligheidsprotocol zoals HTTPS en HTTP. U kunt waarden ook valideren wanneer een gebruiker ze alfabetisch of numeriek invoert. U kunt ook op een andere manier valideren door de invoer te beperken tot een verwachte reeks tekens.
Hier zijn enkele andere benaderingen die u ook kunt volgen:
- U kunt een lijst maken van alle veilige protocollen die op uw website zijn toegestaan. Zo blokkeert uw verdediging automatisch schadelijke protocollen die standaard niet worden herkend. Hierdoor kunnen XSS-aanvallen ongeldige waarden niet verbergen door blokkeerlijsten te omzeilen.
- Gebruikers mogen geen HTML-markup plaatsen, maar soms is dit noodzakelijk. U kunt schadelijke tags filteren door whitelists te implementeren. Deze slaan veilige tags op en filteren alle kwaadaardige code die verband houdt met tags op de blacklist. Alle tags buiten uw whitelists worden als blacklisted beschouwd, tenzij u ze specificeert.
- U moet uw website controleren op beveiligingsupdates. Stel dat u van plan bent JavaScript-bibliotheken te gebruiken om rechtstreeks vanuit de browser van de gebruiker te filteren en te coderen. In dat geval kunt u ook XSS-aanvallen voorkomen met behulp van een server-side template-engine. Deze kan dynamische inhoud in HTML insluiten en een specifieke code definiëren.
- U kunt ook filters met argumenten gebruiken en de context definiëren. Dit kan helpen om de meeste gevallen van XSS-aanvallen te voorkomen. En u kunt deze ontsnappingsfuncties bekijken om periodiek te evalueren of u door wilt gaan met de sjabloonengine of het framework.
- Er zijn ook ingebouwde functies in PHP om entiteiten te coderen, en u kunt deze aanroepen om invoer te ontsnappen wanneer uw waarden zich in een HTML-context bevinden. U kunt ze aanroepen met drie argumenten en hebt Unicode-escaping-invoer nodig. PHP biedt geen API's voor Unicode-escaping-strings.
- Converteer uw strings naar HTML-entiteiten en roep vervolgens functies aan. U kunt uw aangepaste HTML-encoder gebruiken om JavaScript XSS-aanvallen aan de clientzijde te 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.
Meer lerenCross-Site Scripting (XSS)-aanvallen: preventietips (beste praktijken)
De beste praktijken die u kunt toepassen om XSS-aanvallen te voorkomen, zijn:
- Maak gebruik van codering om gebruikersinvoer en uitvoergegevens op te schonen.
- U kunt speciale tekens vervangen door gecodeerde waarden, zodat alle gegevens als tekst in plaats van als code kunnen worden verwerkt. De aanvaller kan geen kwaadaardig script injecteren als hij te maken heeft met platte tekst. Als u de codering correct toepast, zullen geen gebruikers op die manier worden getroffen.
- U kunt vele soorten codering toepassen, afhankelijk van de bedrijfslogica of het type toepassing, zelfs inclusief het type gegevens dat wordt opgeslagen en verwerkt. Er zijn verschillende coderingsmethoden, zoals het coderen van HTML-entiteiten, een van de meest elementaire maatregelen. U kunt ook attribuutwaarden coderen.
- Een andere goede praktijk om XSS-aanvallen te voorkomen, is het filteren van de gegevens die aan de clientzijde worden ontvangen. Door gegevens te filteren worden gevaarlijke tekens zoals tags, HTML-gebeurtenishandlers, kwaadaardige JavaScript-elementen enz. verwijderd.
- U kunt webpagina-responsen retourneren met behulp van een combinatie van invoer- en uitvoerfiltering. Deze methode biedt de beste bescherming tegen opgeslagen XSS-aanvallen.
- Het valideren van gebruikersinvoer is een andere veiligheidsmaatregel. Als u bijvoorbeeld de standaard invoervelden instelt om tekstgegevens toe te staan, kunnen gebruikers geen getallen invoeren. Dit werkt goed voor webformulieren; invoer kan worden gevalideerd om te voorkomen dat aanvallers kwaadaardige scripts uploaden via autorisatie. Webbrowsers geven alleen toegang tot toegestane bronnen en negeren alle andere domeinen. Geïnjecteerde scripts worden niet uitgevoerd, zelfs als een aanvaller erin slaagt XSS-injectie-kwetsbaarheden te ontdekken.
- Om cross-site scripting-aanvallen in jQuery te voorkomen, kunt u gebruikersinvoer doorgeven aan een jQuery-selector. De meest gebruikelijke manier om dit te doen is door de locatie te gebruiken. Hash en geef de selector door om HTML weer te geven. jQuery kan het probleem herkennen en de selectorlogica patchen om te controleren of invoer begint met een hash.
- U kunt bronnen zoals afbeeldingen en scripts specificeren die kunnen worden geladen vanaf de oorsprong van de site. Als een aanvaller XSS-payloads injecteert, kan hij geen bronnen laden die buiten de huidige oorsprong vallen. De jQuery-selector kan de kans op een XSS-aanval of kwetsbaarheid aanzienlijk verminderen.
Als u van plan bent om niet-vertrouwde gegevens door te geven aan uw jQuery-selectors, zorg er dan voor dat u waarden correct ontsnapt met behulp van de js—escape-functie. U kunt XSS-aanvallen ook beperken door gebruik te maken van inhoudsbeveiligingsbeleid. Deze kunnen u helpen bij het beheren van verschillende aspecten van extern scriptbeheer, zoals het laden en uitvoeren van inline scripts.
Veelvoorkomende voorbeelden van XSS-aanvallen
Hier volgen enkele veelvoorkomende voorbeelden van XSS-aanvallen in de praktijk:
- British Airways werd in 2018 gehackt door MageCart, een beruchte hackersgroep. De groep maakte misbruik van een XSS-kwetsbaarheid in de JavaScript-bibliotheek. Klantgegevens werden naar een kwaadaardige server gestuurd met een domeinnaam die leek op die van de officiële website. Uiteindelijk werden bij meer dan 380.000 boekingen creditcardgegevens gestolen, wat de luchtvaartmaatschappij veel geld kostte totdat de inbreuk te laat werd ontdekt.
- Fornite is een populaire online multiplayergame die te maken kreeg met een XSS-aanval. Door een onveilige SSO-kwetsbaarheid werden gebruikers omgeleid naar een valse inlogpagina, waar hun gegevens werden gestolen. Spelers verloren ook virtuele valuta binnen het spel en opgenomen chats van spelers werden gelekt.
- eBay had een XSS-kwetsbaarheid waardoor aanvallers volledige toegang hadden tot verkopersaccounts. Hackers manipuleerden de positie van eBay-advertenties 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 de webbeveiliging. Ze ondermijnen het vertrouwen in online platforms en brengen gebruikersgegevens in gevaar. Door zich bewust te zijn van de verschillende soorten XSS-aanvallen en de juiste preventiemechanismen toe te passen, kunnen ontwikkelaars hun applicaties beveiligen. Geschikte maatregelen zijn onder meer invoervalidatie, uitvoercodering en de toepassing van beleidsregels voor inhoudsbeveiliging.
Beveiligingsaudits en geavanceerde tools voor dreigingsdetectie zijn essentieel om een veilige online aanwezigheid te garanderen. Naarmate de technologie vordert, wordt ook de methodologie van aanvallers steeds geavanceerder , dus voorzichtigheid is geboden. Door prioriteit te geven aan XSS-preventie kunnen organisaties hun reputatie beschermen en de integriteit van hun online aanwezigheid waarborgen.
FAQs
Bij XSS-aanvallen worden kwaadaardige scripts in websites geïnjecteerd, zodat hackers toegang krijgen tot gevoelige gebruikersgegevens. XSS-aanvallen maken gebruik van 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 beleidsregels voor inhoudsbeveiliging verminderen ook de risico's.
XSS-aanvallen maken misbruik van webapplicaties door kwaadaardige scripts te injecteren die worden uitgevoerd op browsers die door gebruikers worden gebruikt, waarbij beveiligingscontroles worden omzeild en toegang wordt verkregen tot gevoelige informatie.
XSS moet worden voorkomen omdat het kan leiden tot datalekken, financiële verliezen en reputatieschade. Het ondermijnt ook het vertrouwen van de gebruiker en kan mogelijk malware of phishingaanvallen veroorzaken.
Oplossingen en tools zijn onder meer kwetsbaarheidsscanners, webapplicatie-firewalls en geavanceerde systemen voor dreigingsdetectie. Deze helpen bij het opsporen van kwetsbaarheden en het blokkeren van kwaadaardige scripts.
Ja. Een WAF kan XSS-aanvallen blokkeren door verkeer te filteren en kwaadaardige scripts te identificeren voordat ze interactie kunnen hebben met de applicatie.
Bij XSS-testen worden kwetsbaarheidsscanners en penetratietesttools gebruikt om aanvallen te simuleren en mogelijke toegangspunten voor kwaadaardige scripts te vinden.
Om u te beschermen tegen steeds veranderende bedreigingen, moeten beveiligingsscans voor XSS-kwetsbaarheden regelmatig worden uitgevoerd, idealiter elke drie maanden.