Cross Site Scripting (XSS)

Laatst bijgewerkt: 14/02/2025

Cross-Site Scripting (XSS) is een veelvoorkomende beveiligingskwetsbaarheid op websites waarbij een aanvaller schadelijke scripts injecteert in webpagina's die door andere gebruikers worden bekeken. Deze scripts worden meestal geschreven in JavaScript, maar kunnen ook in andere talen zoals HTML of VBScript zijn.

Het gevaar van XSS is dat het wordt uitgevoerd in de browser van de gebruiker, wat kan leiden tot:

  • Diefstal van cookies en sessietokens – Dit stelt aanvallers in staat om in te loggen als de gebruiker.
  • Manipulatie van webinhoud – Kwaadwillenden kunnen misleidende informatie tonen of gebruikers omleiden naar malafide websites.
  • Phishing en social engineering – Gebruikers kunnen verleid worden om vertrouwelijke gegevens in te vullen op vervalste formulieren.

Hoe werkt XSS?

Een XSS-aanval gebeurt meestal wanneer een website niet goed valideert of zuivert wat gebruikers invoeren. Het schadelijke script wordt opgeslagen of weerspiegeld en uitgevoerd in de browser van een andere gebruiker.

Er zijn drie hoofdtypen XSS-aanvallen:

  1. Stored XSS (Opgeslagen XSS):

    • Het schadelijke script wordt permanent opgeslagen op de server, bijvoorbeeld in een database, forumcommentaar of gebruikersprofiel.
    • Elke gebruiker die de geïnfecteerde pagina bekijkt, voert onbewust het script uit.
    • Voorbeeld: Een aanvaller plaatst een schadelijke <script>-tag in een blogreactie. Elke gebruiker die de reacties bekijkt, voert dat script uit.
  2. Reflected XSS (Weerspiegeld XSS):

    • Het schadelijke script wordt verwerkt en teruggestuurd door de server als onderdeel van de URL of invoerveld.
    • Dit gebeurt meestal via een link die het slachtoffer moet openen.
    • Voorbeeld: Een aanvaller stuurt een link naar een zoekpagina met een kwaadaardig script in de URL. Wanneer het slachtoffer erop klikt, wordt het script uitgevoerd.
  3. DOM-based XSS:

    • Het script wordt uitgevoerd doordat de browser zelf de DOM (Document Object Model) manipuleert, zonder tussenkomst van de server.
    • Voorbeeld: Een kwaadwillende manipuleert de URL of cookies, en het JavaScript op de pagina verwerkt dit zonder beveiliging.

Hoe voorkom je XSS?

  1. Invoer- en uitvoer-sanitatie:

    • Zuiver alle gebruikersinvoer door gevaarlijke tekens te ontsnappen (zoals <, >, " en ').
    • Gebruik hiervoor functies zoals htmlspecialchars() in PHP of encodeURIComponent() in JavaScript.
  2. Gebruik van Content Security Policy (CSP):

    • Beperk de bronnen van scripts die mogen worden uitgevoerd.
    • Dit voorkomt dat kwaadaardige scripts van onbekende bronnen worden uitgevoerd.
  3. Escape data in HTML en JavaScript:

    • Gebruik veilige methoden om dynamische data in HTML, JavaScript of URL's te plaatsen.
  4. Geen vertrouwen op client-side validatie alleen:

    • Controleer invoer altijd op de server, zelfs als je ook client-side validatie gebruikt.
  5. Gebruik veilige frameworks:

    • Frameworks zoals React en Angular ontsmetten automatisch de invoer als deze in de HTML wordt weergegeven.

Voorbeeld van XSS:

<!-- Onveilige code -->
<p>Welkom, <?php echo $_GET['user']; ?>!</p>
Als een aanvaller de URL als volgt manipuleert:
https://voorbeeld.nl/?user=<script>alert('XSS-aanval!');</script>

Dan wordt de alert uitgevoerd in de browser van de gebruiker.


Hoe deze kwetsbaarheid te verhelpen:

<!-- Veilige code -->
<p>Welkom, <?php echo htmlspecialchars($_GET['user'], ENT_QUOTES, 'UTF-8'); ?>!</p>
 

Hier wordt de uitvoer ontsmet, waardoor het script als tekst wordt weergegeven in plaats van uitgevoerd.


Conclusie

Cross-Site Scripting is een gevaarlijke en veelvoorkomende kwetsbaarheid die gebruikers en websites kan compromitteren. Door het toepassen van goede beveiligingspraktijken, zoals input-sanitatie, CSP en veilige frameworks, kun je XSS effectief voorkomen.

 
 
 
 
 

Kiyoh

9.9

gebaseerd op 465 beoordelingen

Beoordeel >

Mediawax werkt met o.a.

Installatron Partner Imunify 360 Secured PHP 8 op alle servers Kernelcare Sectio ssl-certificaten Gratis Let's Encrtypt certificaten