Ga naar hoofdinhoud

JavaScript Attacks — Low

Dit onderdeel draait om client-side logica. We kijken wat er misgaat als een webserver beveiligingsbeslissingen overlaat aan JavaScript-code in de browser van de gebruiker.

1. Predict (Voorspel)

Het formulier heeft een tekstvak (Woord) en een verborgen token-veld. Bij het verzenden berekent JavaScript in de pagina zélf het token op basis van wat er op dat moment in het tekstvak staat. De server keurt de poging goed als het woord success is én het token bij dat woord past.

Vraag: Je typt success in het tekstvak en klikt op Submit. Wat gebeurt er, en waarom is dat een probleem?

Antwoord

Het werkt meteen — je krijgt "Gefeliciteerd". Je hoeft geen geheim token te kennen: de JavaScript in jouw browser rekent het token voor je uit op basis van het woord dat jij invult. Wie het formulier verzendt, levert dus zowel het woord als het bijpassende token aan. Een "beveiliging" die volledig in de browser wordt berekend, beveiligt niets.

2. Run (Uitvoeren)

Start het lab, typ success in het tekstvak en klik op Submit.

Laden...

Je ziet de melding "Gefeliciteerd! Correct token ingevoerd." — zonder dat je ooit het token hoefde te kennen.

3. Investigate (Onderzoeken)

Open F12 → Elements (of Sources) en bekijk het <script> onder aan het formulier.

Vraag: Hoe berekent de pagina het token uit het woord? Wat betekent dat voor de veiligheid?

Antwoord

Het script draait het woord simpelweg om (successsseccus) en zet dat in het verborgen token-veld. Het "geheime" algoritme staat gewoon leesbaar in de pagina, dus iedereen kan het namaken. Omdat de browser het token maakt, bepaalt de gebruiker het token — niet de server.

Labbeperking

Diep inspecteren van de pagina in het beveiligde lab-iframe lukt niet altijd. Voor de volledige F12-ervaring gebruik je een lokale DVWA-installatie.

4. Modify & Make (Aanpassen & Maken)

Verander het woord in het tekstvak naar iets anders dan success (bijvoorbeeld hallo) en verzend. Verzend daarna nog eens met success.

Vraag: Waarom lukt alleen success, ook al maakt de browser voor elk woord netjes een passend token?

Antwoord

De server controleert náást het token ook of het woord letterlijk success is. Het token-veld voegt daar niets aan toe, want het wordt toch in de browser gemaakt. De echte controle ("is het woord success?") had net zo goed zonder token gekund — het token is schijnveiligheid.

5. ✓ Wat moest je zien?

Controle
  • Het invullen van success slaagt meteen, zonder dat je een token hoefde te kennen.
  • In de paginabron zie je precies hoe het token wordt berekend (het woord omgekeerd).
  • Alleen success wordt goedgekeurd, omdat de server ook het woord zelf controleert — het client-side token voegt geen beveiliging toe.

6. Er gaat iets mis...

Als een webserver blind de input van een browser gelooft zolang de "rekensom" klopt, noem je zo'n systeem "Client-Authoritative". Bij online games zie je dit veel: als de game-client beslist of een schot raak was en de server dat klakkeloos goedkeurt, staat de deur wagenwijd open voor cheaters. Never trust the client.