Skip to main content

Cyber Security 1 (wip)

Work

Inhoud

in
    Progress

  1. Wat is Cyber Security?
  2. HTTPS en netwerkveiligheid
  3. Encryptie
  4. Hashing
  5. Brute Force-aanvallen en Loginbeveiliging
  6. Rainbowtables
  7. Salting en encryptie

1 Wat is Cyber Security?

🎯 Leerdoelen

  • Je weet wat Cyber Security is en waarom het belangrijk is.
  • Je kent verschillende soorten cyberaanvallen.
  • Je kunt voorbeelden noemen van echte incidenten en uitleggen wat er fout ging.

💡 Uitleg

Cyber Security betekent simpel gezegd: het beschermen van computersystemen tegen aanvallen of misbruik. Denk hierbij aan het veilig houden van je website, je wachtwoorden, je e-mails en alle andere digitale gegevens.

Als je een website of app bouwt, ben je automatisch verantwoordelijk voor de veiligheid van de gegevens van je gebruikers. Hackers proberen vaak in te breken via bekende zwakke plekken, zoals slechte wachtwoorden of fouten in je code.

Voorbeelden van cyberaanvallen:

  1. Phishing: iemand probeert jou te misleiden om je wachtwoord af te geven (bv. via een nep-mail van je bank)
  2. Malware: schadelijke software zoals een virus, ransomware of spyware
  3. Virus: speciaal soort malware dat zichzelf kan vermenigvuldigen (net als het Corona virus).
  4. DDoS-aanval: een server wordt overspoeld met aanvragen en raakt onbereikbaar
  5. SQL-injection: via een formulier wordt je database gehackt
  6. Man-in-the-middle: iemand onderschept je gegevens tussen jou en een website

👉 Je gaat in deze module zien hoe aanvallen werken én hoe je jezelf (en jouw code) daartegen kunt beschermen.

Cyberaanvallen maken gebruik van kwaadaardige software

🛠️Opdracht 1, kwaadaardige software

Hierboven staat een lijst van 6 soorten cyberaanvallen. Welke van deze maakt niet per sé gebruik van kwaadaardige software?

Zoek informatie op internet en leg uit!

Voeg je bronvermelding toe.

🛠️Opdracht 2, risico

Hierboven zijn 6 voorbeelden van cyberaanvallen beschreven. Zoek zelf op wat de volgende soorten cyberaanvallen betekenen:

  1. Ransomware
  2. Trojan
  3. Spyware
  4. Adware
  5. Keylogger

Zet deze 6 soorten op volgorde van gevaarlijkheid (volgens jou) en leg bij elk type uit waarom je het op die plek zet.

Voeg je bronvermelding toe.

🛠️ Opdracht 3, Incident analyseren

  1. Zoek online een bekend cybersecurity-incident (bijv. een datalek, ransomware-aanval of hack bij een groot bedrijf).
  2. Beschrijf in je eigen woorden:
    • Wat er is gebeurd
    • Wat de gevolgen waren
    • Wat er beter gedaan had kunnen worden
  3. Voeg je bronvermelding toe.

🧠 Opdracht 4, Reflectie

  • Waarom denk jij dat veel mensen niet nadenken over digitale veiligheid?
  • Wat is iets waar jij op gaat letten sinds je deze les hebt gevolgd?

📤 Inleveren

  • Beschrijf alle het antwoord op alle 4 de opdrachten. Neem de vraag over en weer de vraag daarna uit.
    Werk netjes en lever een PDF in. 

☝️Om jezelf goed te beschermen tegen 'hacks' kun je heel dingen doen. Eén van de basis zaken is het versleutelen van gegevens.

👉 In de rest van deze module gaan we vooral hier op in zoomen.

2 HTTPS en netwerkveiligheid

🎯 Leerdoelen

  • Je begrijpt het verschil tussen HTTP en HTTPS.
  • Je weet waarom SSL-certificaten belangrijk zijn voor beveiligde communicatie.
  • Je kunt een eigen website beveiligen met HTTPS.

💡 Uitleg

HTTP en HTTPS....?

HTTP en HTTPS zijn de 'talen' waarmee je browser met een website praat.

HTTP staat voor HyperText Transfer Protocol. Het zorgt ervoor dat je webpagina's kunt opvragen van een server.

HTTPS is hetzelfde, maar dan met een extra beveiligingslaag: de S staat voor Secure. Bij HTTPS worden de gegevens versleuteld verstuurd, zodat niemand onderweg kan meelezen.

📌 Daarom zie je http:// of https:// voor een URL – het geeft aan hoe je browser de website moet benaderen.

Wat is het verschil tussen HTTP en HTTPS?

HTTP betekent dat gegevens onversleuteld worden verzonden. Iedereen die tussen jou en de server in zit (zoals hackers op een openbaar netwerk), kan meekijken.

HTTPS (de S staat voor Secure) gebruikt een SSL-certificaat om alle communicatie tussen jouw browser en de server te versleutelen.

Wat is versleutelen eigenlijk?

Versleutelen is het omzetten van gegevens zodat ze niet meer zomaar leesbaar zijn.

Vaak heb je een digitale sleutel nodig om deze gegevens weer om te zetten in leesbare informatie.

In de volgende hoofdstukken over encryptie wordt dit uitgelegd.

Waarom is HTTPS belangrijk?

  • Het voorkomt dat anderen je gegevens kunnen "onderscheppen".
  • Het zorgt voor vertrouwen bij je bezoekers (slotje in adresbalk).
  • Google straft HTTP-sites af in zoekresultaten (door niet op een goede positie te zetten)
Onderscheppen van gegevens, hoe dan?

image.png

Computers op het internet zijn verbonden via netwerken. Deze netwerken kan je vrij eenvoudig aftappen. Je kan dus meelezen met de berichtjes die verstuurd worden over het netwerk.

Soms kan je zelfs de berichtjes opvangen, veranderen en doorsturen.

 

Dit kan op verschillende manieren maar als je toegang hebt tot bepaalde netwerk aparatuur is dat vrij eenvoudig. Dus jouw internet provider zou bijvoorbeeld alles wat jij op het op internet doet kunnen volgen. Als het netwerkverkeer is versleuteld is dat een stuk lastiger.

Wat is een SSL-certificaat?

Een SSL-certificaat is een soort digitaal paspoort voor je website. Het zorgt ervoor dat bezoekers zeker weten dat ze verbinding hebben met jóuw site, en dat de data versleuteld is.

🔒 Waarvoor biedt HTTPS wél bescherming?

HTTPS zorgt ervoor dat de verbinding tussen jouw computer en een website veilig is. Dat betekent:

  1. Niemand kan meekijken met wat jij invult of leest (zoals je wachtwoord of bankgegevens).

  2. Niemand kan de informatie veranderen terwijl die onderweg is.

  3. Je weet zeker dat je met de echte website praat (en niet met een nepserver), als het certificaat klopt.

Denkbij https  aan een afgesloten envelop in plaats van een open briefkaart: anderen kunnen het bericht niet lezen of aanpassen.

❌ Waarvoor biedt HTTPS géén bescherming?

HTTPS voorkomt niet alles. Het beschermt je niet tegen:

  1. Nepwebsites met een slotje – criminelen kunnen ook een HTTPS-site maken die er echt uitziet.

  2. Phishing – als je op een valse link klikt en je wachtwoord daar invult, ben je nog steeds de klos.

  3. Virussen of malware – als je iets downloadt, controleert HTTPS niet of het veilig is.

  4. Slechte wachtwoorden – HTTPS helpt niet als jij zelf een zwak of gestolen wachtwoord gebruikt.

 

🧠 Reflectie

  1. Waarom is HTTPS extra belangrijk op loginpagina’s? Leg uit wat het risico is.
  2. Wat zou er kunnen gebeuren als je een onbeveiligde (HTTP) verbinding gebruikt in een openbaar WiFI netwerk? Leg uit wat het risico is.
  3. Je gaat naar www.nu.nl (voor het nieuws) en stel dat je geen slotje ziet en er dus geen SSL verbinding is gemaakt. Wat kan er mis gaan? Wat is het risico?
  4. Je meldt je aan voor een sport evenement op een onbeveiligde (HTTP) site. Leg uit wat het risico is.
  5. Je hebt een website op je laptop draaien en een medestudent bezoekt deze website vir een onbeveiligde (HTTP) verbinding. Leg uit wat het risico is.
  6. Zet alle risico's (nummer 1 t/m 5) op volgorde van gevaarlijkheid. Motiveer je antwoord.

De refelctie is een verslag in je eigen woorden, AI input wordt niet geaccepteerd!

Deze vragen komen terug in de kennis-check!

📤 Inleveren

  • Lever je reflectie in als een .pdf

3 Encryptie

🎯 Leerdoelen

  • Je weet wat encryptie betekent en waarvoor ze gebruikt worden.
  • Je kunt een eenvoudige versleuteling (Caesar cipher) herkennen en kraken.
  • Je weet het verschil tussen symmetrische en asymmetrische encryptie.

💡 Uitleg

Wat is encryptie?

Encryptie (versleuteling) betekent dat je gegevens onleesbaar maakt voor anderen. Alleen iemand met de juiste ‘sleutel’ kan de gegevens weer ontcijferen.

  • Symmetrisch: dezelfde sleutel voor versleutelen en ontsleutelen (bijv. Caesar cipher).
  • Asymmetrisch: verschillende sleutels voor versleutelen en ontsleutelen (zoals bij HTTPS).

🔎 Verdieping over symeterische en asymetrische encryptie

Leg uit, hoe werkt dat asymentrisch precies?

Stel iedereen heeft een eigen brievenbus met twee sloten met twee sleutels: een public key waarmee je een brief in de brievenbus kan stoppen en een private key waarmee de eigenaar de brievenbus kan openen en de inhoud kan bekijken.

image.png

 

“Wil je mij iets sturen?

 

Gebruik dan deze publieke sleutel (= mijn slotje).”

 

 

 

Alleen jij kunt de brievenbus openen,

want jij hebt de privé-sleutel die bij dat slotje hoort.

Waarom zou asymentrische encryptie beter zijn dan symetrische encryptie?
🔐 Symmetrische encryptie
  • Sleutel is geheim en wordt gedeeld

  • Je gebruikt dezelfde sleutel om iets te versleutelen én te ontsleutelen.

  • Probleem: je moet die geheime sleutel veilig delen, en dat is lastig.

🔐 Asymmetrische encryptie
  • Gebruikt twee sleutels:

    • Een publieke sleutel (om te versleutelen)

    • Een privé sleutel (om te ontsleutelen)

  • Je kunt de publieke sleutel vrij geven aan iedereen, want alleen jij kunt de boodschap met je privé sleutel openen.

🤔 Waarom is asymmetrische encryptie beter?
  • De privé sleutel hoef je nooit met iemand te delen en de kans dat deze prive sleutel in verkeerde handen komt is dan dus kleiner.

Waarom zou je symetrische encryptie nog geberuiken als assymentrische encryptie beter is?
🔧 Kort gezegd:
  • Asymmetrisch = veilig, wat meer complex en trager.

  • Symmetrisch = iets minder veilig, maar wel snelen en eenvoudig

Om dat symetrische encrytie sneller en eenvoudiger is wordt die voroal gebruikt daar waar de sleutel snel veranderd dan is het niet zo erg als de sleutel in verkeerde hamden komt omdat er dan weer een neiuwe sleutel wordt gebruikt.

🛠️ Opdracht - Caesar Encryptie

In deze opdracht wordt jouw gevraagd een wachtwoord te 'hacken'. Het wachtwoord dat je moet ontcijferen is encrypted met het Caesar algoritme. Om te kunnen hacken moet je eerst begrijpen hoe het Caesar encryptie algoritme werkt.

Code Caesar encryptie
<?php

$sleutel = 2; // Caesar-sleutel: aantal posities verschuiven

function caesar_encrypt($tekst, $verschuiving) {
    $resultaat = '';

    for ($i = 0; $i < strlen($tekst); $i++) {
        $char = $tekst[$i];

        if (ctype_alpha($char)) {
            $offset = ctype_upper($char) ? ord('A') : ord('a');
            $resultaat .= chr(((ord($char) - $offset + $verschuiving) % 26) + $offset);
        } else {
            $resultaat .= $char; // Laat leestekens, spaties en cijfers ongemoeid
        }
    }

    return $resultaat;
}

function caesar_decrypt($tekst, $verschuiving) {
    return caesar_encrypt($tekst, 26 - $verschuiving); // Omgekeerde verschuiving
}

// Voorbeeld
$origineel = "Hallo Wereld!";
$gecodeerd = caesar_encrypt($origineel, $sleutel);
$ontsleuteld = caesar_decrypt($gecodeerd, $sleutel);

echo "Origineel: $origineel\n";
echo "Versleuteld: $gecodeerd\n";
echo "Ontsleuteld: $ontsleuteld\n";

Bekijk deze encryptie methode en probeer te begrijpen wat er gebeurt. Je kunt natuurlijk de code ook proberen/testen.

Als je het algoritme begrijpt, kan je verder.

👨‍💻 Hack-opdracht

Het volgende wachtwoord is encrypted met de Caesar methode.

Chs_hr_fdgdhl!

Kan jij dit wachtwoord kraken?

🧠 Reflectie

  • Is het Caesar algoritme een vorm van symmetrische- of asymetrische encryptie? Leg uit waarom.
  • Hoe zou jij aan een niet programmeur uitleggen wat Caesar encryptie is?
  • Hoe heb je het wachtwoord gehacked? Welke stappen heb je doorlopen?
  • Als je een andere en misschien een iets lastigere wachtwoord moest kraken dat met het Caesar algoritme is ge-encrypt, hoe zou je dat dan aanpakken?

📤 Inleveren

    1. Antwoorden op de reflectiie PDF

    4 Hashing

    🎯 Leerdoelen

    • Je weet hashing betekenen en waarvoor ze gebruikt worden.
    • Je kunt wachtwoorden op een veilige manier hashen in PHP.
    • Je weet hoe je hashed wachtwoorden zou kunnen hacken.

    💡 Uitleg, wat is hashing?

    Hashing is een soort encryptie die maar één kant op werkt; Je kunt wel encrypten maar niet de-crypten!

    Hashing is dus eenrichtingsversleuteling: je zet een waarde om in een versleutelde vorm die je niet meer kunt terugrekenen naar het origineel. Dit wordt vaak gebruikt voor het veilig opslaan van wachtwoorden.

    In PHP kun je een wachtwoord hashen met:

    $hash = hash("sha256", "geheim123");

    Het resultaat is bijvoorbeeld: $2y$10$f0849a42909dc18035cb470d239e485acbc1cdd1e48bc41f7a2801e3b08bdbdb

    Je kunt dit niet terug rekenen naar geheim123

    🔑 Wat gebeurt er bij het inloggen?

    Bij het inloggen controleer je of het ingevoerde wachtwoord overeenkomt met de opgeslagen hash:

    if hash("sha256", $ingevoerdWachtwoord) == $hash {
        echo "Ingelogd!";
    }
    ⚠️ Je moet het zo zien dat het ingevoerde wachtwoord opnieuw wordt omgezet met de hash-functie. Is het resultaat hetzelfde als de opgeslagen $hash dan is het ingevoerde wachtwoord goed.

    🛠️ Opdracht 2 Hashing

    Neem om te beginnen de start code, form.htm en check.php  over.

    Controleer of het werkt en probeer in te loggen met admin/wachtwoord. Probeer de code te begrijpen.

    form.html
    <!DOCTYPE html>
    <html lang="nl">
    <head>
        <meta charset="UTF-8">
        <title>Loginformulier</title>
    </head>
    <body>
        <h2>Login</h2>
        <form method="get" action="check.php">
            <label for="gebruikersnaam">Gebruikersnaam:</label><br>
            <input type="text" name="gebruikersnaam" id="gebruikersnaam" required><br><br>
    
            <label for="wachtwoord">Wachtwoord:</label><br>
            <input type="password" name="wachtwoord" id="wachtwoord" required><br><br>
    
            <button type="submit">Inloggen</button>
        </form>
    
        <p><?= $melding ?></p>
    </body>
    </html>
    check.php
    <?php
    $gebruikers = [
        'max' => '',
        'lisa' => '',
        'admin' => 'e0NRta6G8WpOMOMK9qOC6O3z6F7cJcmA0r8GRPt4NeWcAUO4ED8Di' // Vaste hash van "wachtwoord"
    ];
    
    $melding = '';
    
    $gebruikersnaam = $_GET['gebruikersnaam'];
    $wachtwoord = $_GET['wachtwoord'];
    
    if (isset($gebruikers[$gebruikersnaam])) {
        if (password_verify($wachtwoord, $gebruikers[$gebruikersnaam])) {
            $melding = "✅ Ingelogd als <strong>$gebruikersnaam</strong>!";
        } else {
            $melding = "❌ Fout wachtwoord.";
        }
    } else {
        $melding = "❌ Gebruiker bestaat niet.";
    }
    
    ?>

    Als je de code begrijpt dan is de volgende opdracht niet moeilijk.

    👉 Zorg ervoor dat de gebruikers max en lisa kunnen inloggen met de volgende wachtwoorden.
    Gebruikersnaam Wachtwoord
    max top-secret123!
    llisa sinclair1974

    Probeer te ontdekken hoe je dit moet doen en hoe je de juiste wachtwoorden toe kan voegen.

    👨‍💻 Hack-opdracht

    Ste je hebt de volgende code onderschept;

    $gebruikers = [
        'max' => '$2y$10$AF4UcvDki/VEQKCUzHQxIudD9cYLRaF9v4GIkhTyTzWzxCN/Yo0q6',
        'lisa' => '$2y$10$nWGSzTcP7TShCVwz78eNGO3LjoxR/FPR3WjZqxbodWHQUe/XEzZC.',
        'admin' => '$2y$10$e0NRta6G8WpOMOMK9qOC6O3z6F7cJcmA0r8GRPt4NeWcAUO4ED8Di'
    ];

    Aan jouw de taak om de wachtwoorden te 'kraken'.

    Tip 1

    Tip Het is niet mogelijk om de hash terug te rekenen vanuit de hash naar een wachtwoord.

    Tip 2

    Tip 2Je kunt natuurlijk wel een wachtwoorden in een hash omzetten en kijken of de hash hetzelfde is.

    Tip 3

    Lisa en Max hebben wachtwoorden die veel gebruikt worden en niet erg veilig zijn.

    😀 Had  je geen tips nodig, dan ben je een meester hacker!

    🧠 Reflectie

    • Waarom is het geen goed idee om wachtwoorden encrypted (versleuteld) op te slaan en waarom kun je beter hashing gebruiken?
      Leg uit wat er mis zou kunnen gaan als je encryptie gebruikt voor het opslaan van wachtwoorden.
    • Stel je hebt een bestand gekregen met allemaal userid's en wachtwoorden. De wachtwoorden zijn hashed. Leg uit hoe je mogelijk toch achter de wachtwoorden kan komen.

    📤 Inleveren

      1. aangepaste check.php
      2. de antwoorden op de vragen uit de reflectie in pdf

      5 Brute Force-aanvallen en Loginbeveiliging

      🎯 Leerdoelen

      • Je weet wat een brute force-aanval is.
      • Je kunt een eenvoudige loginpagina maken in PHP.
      • Je begrijpt hoe je zo'n loginpagina kunt beveiligen tegen brute force-aanvallen.

      💡 Uitleg

      Wat is een brute force-aanval?

      Bij een brute force-aanval probeert een aanvaller heel veel verschillende wachtwoorden achter elkaar uit om zo toegang te krijgen tot een account. Als er geen beperking zit op het aantal pogingen, kan dit op den duur succes hebben.

      Hoe bescherm je hiertegen?

      Je kunt brute force-aanvallen voorkomen door bijvoorbeeld:

      • Een limiet te stellen op het aantal pogingen
      • Een vertraging inbouwen bij het inloggen en deze laten groeien als je vaker een fout wachtwoord hebt ingevuld.
      • Tijdelijk een gebruiker of IP-adres te blokkeren (=black listing)
      • Van te voren alleen bepaalde ip adressen toelaten (=white listing)
      • Captcha toe te voegen
      • Twee-factor authenticatie toe te passen
      • Zet alle mislukte inlogpogingen in een logbestand.

      Deze laatste bescherming met logfile voorkomt niet zozeer dat er brute force aanvallen plaatsvinden, maar je kunt wel zien als er wat vreemds gebeurt. Je kan dan op dat moment (extra) maatregelen nemen,

      🛠️ Opdracht

      Maak een eenvoudige loginpagina

      Maak een bestand login.php met het volgende formulier:

      <form method="get" action="inlogcontrole.php">
        Gebruikersnaam: <input name="username"><br>
        Wachtwoord: <input type="password" name="password"><br>
        <input type="submit" value="Login">
      </form>
      

      Maak daarna een eenvoudige inlogcontrole.php in PHP:

      <?php
      session_start();
      
      $gebruikersnaam = "admin";
      $wachtwoord = "geheim";
      
      if (!isset($_SESSION['pogingen'])) {
        $_SESSION['pogingen'] = 0;
      }
      
      if ($_SESSION['pogingen'] >= 3) {
        die("Te veel pogingen. Probeer het later opnieuw.");
      }
      
      if ($_GET) {
        if ($_GET['username'] === $gebruikersnaam && $_GET['password'] === $wachtwoord) {
          echo "Welkom!";
          $_SESSION['pogingen'] = 0;
        } else {
          echo "Foutieve inlog.";
          $_SESSION['pogingen']++;
        }
      }
      ?>

      In het form wordt $_GET gebruikt, is dat handig?

      Vanuit het oogpunt van cyber security is het beter om $_POST te gebruiken. Weet je nog waarom?

      Aanpassingen
      • Verander het formulier en de vervolgpagina zodat je geen post meer gebruikt en zodat het user id en wachtwoord niet meer in de URL staan.
      • Voeg een vertraging toe met sleep(1) bij een mislukte poging.
      • Voeg logging toe aan een tekstbestand zodat je pogingen kunt terugzien.
      Extra uitdaging
      • Als je bijhoud hoevaak een gebruiker probeert in te loggen (met een sessie variabele), dan kan je de tijd tussen twee pogingen laten groeien: de eerste keer moet je 1 seconden wachten, dan 2 dan 4 dan 8 dan 16, etc. etc.

        Kan jij dat implementeren?

      🧠 Reflectie

      • Waarom is het belangrijk om een limiet te stellen op het aantal inlogpogingen?
      • Wat gebeurt er als je de sessiegegevens wist of in een andere browser werkt?
      • Welke nadelen heeft deze eenvoudige beveiliging?

      📤 Inleveren

      • De aangepaste code inlogcontrole.php
      • Reflectie met antwoorden op bovenstaande vragen in pdf.

      ******STOP HERE*******

      6

      --

      Rainbow

      8 Brute Force-aanvallen en Loginbeveiliging

      🎯 Leerdoelen

      • Je weet wat een brute force-aanval is.
      • Je kunt een eenvoudige loginpagina maken in PHP.
      • Je begrijpt hoe je zo'n loginpagina kunt beveiligen tegen brute force-aanvallen.

      💡 Uitleg

      Wat is een brute force-aanval?

      Bij een brute force-aanval probeert een aanvaller heel veel verschillende wachtwoorden achter elkaar uit om zo toegang te krijgen tot een account. Als er geen beperking zit op het aantal pogingen, kan dit op den duur succes hebben.

      Hoe bescherm je hiertegen?

      Je kunt brute force-aanvallen voorkomen door bijvoorbeeld:

      • Een limiet te stellen op het aantal pogingen
      • Tijdelijk een gebruiker of IP-adres te blokkeren
      • Captcha toe te voegen
      • Logging bij te houden van mislukte pogingen

      🛠️ Opdracht – Maak een eenvoudige loginpagina

      Maak een bestand login.php met het volgende formulier:

      <form method="post">
        Gebruikersnaam: <input name="username"><br>
        Wachtwoord: <input type="password" name="password"><br>
        <input type="submit" value="Login">
      </form>
      

      Maak daarna een eenvoudige inlogcontrole in PHP:

      <?php
      session_start();
      
      $gebruikersnaam = "admin";
      $wachtwoord = "geheim";
      
      if (!isset($_SESSION['pogingen'])) {
        $_SESSION['pogingen'] = 0;
      }
      
      if ($_SESSION['pogingen'] >= 3) {
        die("Te veel pogingen. Probeer het later opnieuw.");
      }
      
      if ($_POST) {
        if ($_POST['username'] === $gebruikersnaam && $_POST['password'] === $wachtwoord) {
          echo "Welkom!";
          $_SESSION['pogingen'] = 0;
        } else {
          echo "Foutieve inlog.";
          $_SESSION['pogingen']++;
        }
      }
      ?>
      

      🛠️ Vervolgopdracht – Extra beveiliging

      • Voeg een vertraging toe met sleep(1) bij een mislukte poging.
      • Voeg logging toe aan een tekstbestand zodat je pogingen kunt terugzien.

      🧠 Reflectie

      • Waarom is het belangrijk om een limiet te stellen op het aantal inlogpogingen?
      • Wat gebeurt er als je de sessiegegevens wist of in een andere browser werkt?
      • Welke nadelen heeft deze eenvoudige beveiliging?

      📤 Inleveren

      • Screenshot van de loginpagina
      • Code van jouw login.php
      • Reflectie met antwoorden op bovenstaande vragen
      • Bestandsnamen:
        • loginpagina-<jouw-naam>.jpg
        • login-php-<jouw-naam>.txt
        • login-reflectie-<jouw-naam>.pdf

      9 Firewalls en automatische back-ups

      🎯 Leerdoelen

      • Je weet wat een firewall is en waarvoor die dient.
      • Je kunt uitleggen waarom back-ups belangrijk zijn.
      • Je leert hoe je automatische back-ups instelt op een WordPress-site.

      💡 Uitleg

      Wat is een firewall?

      Een firewall is een digitale poortwachter. Het controleert het verkeer tussen jouw computer (of server) en het internet, en houdt verdachte of gevaarlijke verbindingen tegen.

      Firewalls beschermen tegen:

      • Ongewenste toegang tot je server of computer
      • Kwaadaardige software
      • Netwerkaanvallen

      Er zijn software-firewalls (zoals die in Windows of macOS) en hardware-firewalls (in routers of servers).

      Wat zijn back-ups en waarom zijn ze belangrijk?

      Een back-up is een kopie van je website of bestanden, die je kunt terugzetten als er iets misgaat. Redenen om back-ups te maken:

      • Harde schijf crasht
      • Website wordt gehackt
      • Per ongeluk bestanden verwijderd
      • Update maakt iets stuk

      Met automatische back-ups voorkom je dat je dit handmatig moet doen.

      🛠️ Opdracht 1 – Installeer een firewall-plugin

      1. Log in op je WordPress-dashboard.
      2. Ga naar Plugins > Nieuwe plugin.
      3. Zoek op Wordfence Security (of een andere populaire firewall plugin).
      4. Installeer en activeer de plugin.
      5. Bekijk wat de plugin doet en of je al meldingen krijgt van verdachte activiteiten.

      🛠️ Opdracht 2 – Stel automatische back-ups in

      1. Ga naar Plugins > Nieuwe plugin.
      2. Zoek op UpdraftPlus (of een vergelijkbare plugin).
      3. Installeer en activeer de plugin.
      4. Ga naar het menu van de plugin en stel in dat er:
        • Wekelijks een back-up wordt gemaakt
        • Zowel bestanden als database worden opgeslagen
        • De back-up lokaal of op Google Drive wordt opgeslagen
      5. Maak handmatig de eerste back-up en bekijk het resultaat.

      🧠 Reflectie

      • Wat zou er kunnen gebeuren als je site geen firewall heeft?
      • Hoe vaak denk jij dat je back-ups zou moeten maken?
      • Heb je nu meer vertrouwen in je site als er iets misgaat?

      📤 Inleveren

      • Screenshot van de firewall-plugin instellingen
      • Screenshot van de automatische back-up-instellingen of overzicht
      • Reflectie met antwoorden op bovenstaande vragen
      • Bestandsnamen:
        • firewall-plugin-<jouw-naam>.jpg
        • backup-instellingen-<jouw-naam>.jpg
        • firewall-backup-reflectie-<jouw-naam>.pdf

      10 Encryptie – een geheime boodschap krakentables

      🎯 Leerdoelen

      • Je begrijpt wat encryptieeen is.rainbow table is en waarom het gevaarlijk is bij wachtwoordbeveiliging.
      • Je weetkunt waaromhandmatig encryptieeen belangrijkwachtwoord isopzoeken in deeen digitalerainbow wereld.table.
      • Je leertsnapt eenwaarom versleuteldesalting boodschaprainbow herkennentables enonbruikbaar ontcijferen.maakt.

      Menses gebruiken vaak 'standaard' wachtwoorden.

      Wat denk jij dat het meest gebruikte wachtwoord is?

      Er zijn sites waarom de meest gebruikte wachtwoorden staan.

      👉 Ga naar de site van Nordpass en controleer of jouw antwoord klopt.

      💡 Uitleg

      Uitleg:

      Wat is encryptie?een rainbow table?

      Een rainbow table is een lijst van veelgebruikte wachtwoorden met hun bijbehorende hashes. Aanvallers gebruiken dit om snel te achterhalen welk wachtwoord hoort bij een bepaalde hash.

      Stel: iemand vindt een lijst met gebruikersnamen en gehashte wachtwoorden. Als jouw wachtwoord in zo'n rainbow table staat, kan die hash direct worden terugvertaald naar het originele wachtwoord – zonder te hoeven raden.

      Waarom werken rainbow tables?

      • Hash-algoritmes zoals SHA256 geven altijd dezelfde output voor dezelfde input.
      • Veel mensen gebruiken zwakke, veelvoorkomende wachtwoorden.

      Starters code

      EncryptieDeze code vraag om een wachtwoord te resetten. Het wachtwoord wordt in JSON bestand opgeslagen. Controleer of de code werkt en controleer of het wachtwoord wordt opgeslagen in gebruikers.json .

      <?php
      // Als het formulier is verzonden
      if ($_SERVER['REQUEST_METHOD'] === 'POST') {
          $userid = $_POST['userid'] ?? '';
          $wachtwoord = $_POST['wachtwoord'] ?? '';
      
          // Hash het versleutelenwachtwoord met SHA-256
          $hashed = hash('sha256', $wachtwoord);
      
          // Bestandsnaam
          $bestand = 'gebruikers.json';
      
          // Bestaat het JSON-bestand al?
          if (file_exists($bestand)) {
              $data = json_decode(file_get_contents($bestand), true);
          } else {
              $data = [];
          }
      
          // Sla of update de gebruiker op
          $data[$userid] = $hashed;
      
          // Schrijf naar bestand (mooi opgemaakt voor leesbaarheid)
          file_put_contents($bestand, json_encode($data, JSON_PRETTY_PRINT));
      
          echo "<p>Wachtwoord succesvol opgeslagen voor gebruiker <strong>$userid</strong>.</p>";
          echo "<p>SHA256 hash: <code>$hashed</code></p>";
          exit;
      }
      ?>
      
      <!DOCTYPE html>
      <html lang="nl">
      <head>
          <meta charset="UTF-8">
          <title>Wachtwoord resetten</title>
      </head>
      <body>
          <h2>Reset je wachtwoord</h2>
          <form method="post">
              <label for="userid">Gebruikers-ID:</label><br>
              <input type="text" id="userid" name="userid" required><br><br>
      
              <label for="wachtwoord">Nieuw wachtwoord:</label><br>
              <input type="password" id="wachtwoord" name="wachtwoord" required><br><br>
      
              <button type="submit">Opslaan in JSON</button>
          </form>
      </body>
      </html>

      👨‍💻 Hack-opdracht

      200 meest voorkomende wachtwoorden (internationaal)

      123456
      123456789
      12345
      qwerty
      password
      12345678
      111111
      123123
      1234567890
      1234567
      qwerty123
      000000
      1q2w3e
      aa12345678
      abc123
      password1
      1234
      qwertyuiop
      123321
      password123
      1qaz2wsx
      iloveyou
      admin
      qazwsx
      123qwe
      123abc
      654321
      666666
      superman
      112233
      1q2w3e4r
      asdfghjkl
      zxcvbnm
      121212
      1qazxsw2
      letmein
      trustno1
      hello
      888888
      football
      monkey
      !@#$%^&*
      charlie
      batman
      696969
      hottie
      flower
      loveme
      donald
      login
      pokemon
      starwars
      jordan
      dragon
      michael
      shadow
      master
      killer
      maggie
      biteme
      qwerty1
      freedom
      whatever
      cheese
      pepper
      princess
      jennifer
      michelle
      tigger
      hunter
      sunshine
      ashley
      michael1
      lovely
      qwe123
      777777
      ginger
      cookie
      welcome
      taylor
      summer
      soccer
      test
      asdf
      internet
      google
      qweasd
      merlin
      mustang
      baseball
      hannah
      snoopy
      thomas
      mypass
      computer
      daniel
      jessica
      pepper123
      pass
      6969
      1111
      999999
      88888888
      444444
      222222
      555555
      333333
      7777777
      0000
      1212
      1004
      2000
      abcd1234
      1989
      1987
      1979
      1978
      q1w2e3r4
      zxcvbn
      a1b2c3
      azerty
      passw0rd
      123123123
      147258
      1g2w3e4r
      1a2b3c4d
      2580
      qazxsw
      987654321
      password!
      hunter2
      11111111
      131313
      159753
      a123456
      abc123456
      myspace1
      9999
      147147
      aaaaaa
      zaq12wsx
      q1w2e3
      8888
      iloveyou1
      killer123
      qwe123456
      123456a
      abcdef
      asdasd
      poop
      zxcvbn123
      dragon123
      trustno1!
      abcd
      12344321
      password01
      987654
      test123
      cool
      123123a
      internet123
      letmein123
      master123
      welcome1
      football1
      qwert
      batman123
      super123
      77777777
      5555
      ninja
      tinkle
      red123
      star123
      hello123
      pass123
      admin123
      1password
      love123
      66666666
      mypass123
      superman123
      samsung
      qwerty12
      asdfgh
      admin1
      loveyou
      pokemon123
      iloveu
      justin
      asdf1234
      hottie123
      shadow123
      hannah123
      sunshine1
      admin@123

      1. Vraag een mede-student een wachtwoord uit de lijst van een200 boodschapmeest zodatvoorkomende alleenwachtwoorden iemandte kiezen (lijst staat hier boven).
      2. Vraag de student dit wachtwoord in te vullen op jouw Lappie met de juiste"starters sleutelcode" die je net hebt getest.
      3. Laat de boodschapmede-student zien dat je het JSON bestand kan lezen.

        lezen

        Eenen eenvoudigedat vormje isdus zijn hashed wachtwoord kan leven.

      4. Hoe kom je er nu achter welke wachtwoord jouw mede-student heeft gebruikt?
      5. Precies: je maakt code die alle 200 wachtwoorden hashed en je vergelijkt de Caesarversleuteling.gevonden Daarbij wordt elke letter vervangen door een andere letter, bijvoorbeeld 3 letters verder in het alfabet:

        Hallo wordthashes met sleutelde 3hash Kdoor

        Waarom is encryptie belangrijk?

        Encryptie beschermtvan je gegevensmede bij bijvoorbeeld:

        • Het versturen van e-mailsstudent.
        • Bankieren op het internet
        • Inloggen op websites

      🛠️ OpdrachtOpdracht: Vind Kraakhet wachtwoord

      Maak een "mini-rainbow table" van de geheime200 boodschapmeest

      Jevoorkomende hebt een versleutelde boodschap ontvangen die met een Caesarversleuteling is gecodeerd:

      Khoor vwxghqw, jrhgh jhzhogljgh lq f\ehu vhfxulwb!

      Probeer de originele boodschap te achterhalen. De boodschap is versleuteld met een vaste verschuiving. Je mag penwachtwoorden en papierbepaal gebruikenwelk ofwachtwoord eenjouw onlinemede-student Caesar-decoderhad zoals:ingevoerd.

      🛠️ Vervolgopdracht – Maak zelfstaat een versleuteling

      hele

      Gebruikgroot dezelfdebestand methodemet (Caesarversleuteling)gehashte omwachtwoorden. zelfDeze lijst is ook bekend bij hackers en als die een geheimehashed boodschapwachtwoord tehebben maken.kunnen Geefze dedeze versleuteldeopzoeken versiein aandeze database en jouw wachtwoord achterhalen.

      De lijst bevat alle hashed wachtwoorden die ooit een klasgenoot,keer zonderzijn de'gevonden', sleutel.bijvoorbeeld Kanin jouween klasgenootdatabase hemdie kraken?is gehacked.

      🧠 Reflectie

      • HoeWat moeilijkmaakt wasrainbow hettables omzo de versleuteling te kraken?gevaarlijk?
      • Wat gebeurtzou er gebeuren als iemandwe debij sleutelelk nietwachtwoord weet?een andere salt toevoegen?
      • DenkHoe jehelpt datsalting dezeom versleutelingrainbow veiligtables genoegtegen iste voor gevoelige informatie?gaan?

      📤 Inleveren

      • ScreenshotEen vankort jouwverslag gekraakte boodschap +met de originelegevonden tekstwachtwoorden.
      • Een zelfgemaakte geheime boodschap (versleuteld) + sleutel
      • Reflectie met antwoordenantwoord op de vragen
      • Bestandsnamen:
        • geheimbericht-kraken-<jouw-naam>.jpg
        • mijn-encryptie-<jouw-naam>.txt
        • encryptie-reflectie-<jouw-naam>.pdf

      11 Hashing en wachtwoorden

      🎯 Leerdoelen

      • Je weet wat hashing is.
      • Je begrijpt waarom wachtwoorden nietreflectievragen in gewone tekst opgeslagen mogen worden.
      • Je leert hoe je met PHP een wachtwoord kunt hashen en controleren.

      💡 Uitleg

      Wat is hashing?

      Hashing is een manier om een stukje informatie (zoals een wachtwoord) om te zetten in een unieke, vaste code. Deze code kan niet zomaar worden terugvertaald naar het origineel.

      Bijvoorbeeld: wachtwoord wordt met een hashfunctie iets als:

      5f4dcc3b5aa765d61d8327deb882cf99

      Een goede hashfunctie zorgt ervoor dat het onmogelijk is om de originele tekst terug te vinden uit de hash.

      Waarom is dat belangrijk?

      Als iemand je database steelt waarin de wachtwoorden in gewone tekst staan, kunnen ze overal inloggen. Als ze gehasht zijn, is dat veel moeilijker.

      Wat doet PHP?

      In PHP gebruik je password_hash() om een wachtwoord te versleutelen, en password_verify() om te controleren of een ingevoerd wachtwoord klopt.

      🛠️ Opdracht – Probeer het zelf

      1. Maak een nieuw PHP-bestand aan: hash-test.php.
      2. Voeg de volgende code toe en bekijk het resultaat in de browser:
      <?php
      $wachtwoord = \"supergeheim\";
      
      $hash = password_hash($wachtwoord, PASSWORD_DEFAULT);
      echo \"De hash is: \" . $hash;
      
      $ingevoerd = \"supergeheim\";
      
      if (password_verify($ingevoerd, $hash)) {
          echo \"<br>Wachtwoord klopt!\";
      } else {
          echo \"<br>Wachtwoord klopt NIET!\";
      }
      ?>
      1. Verander het ingevoerde wachtwoord in iets anders en bekijk opnieuw het resultaat.

      🧠 Reflectie

      • Wat gebeurt er als je twee keer password_hash() uitvoert op hetzelfde wachtwoord?
      • Waarom is dat eigenlijk goed?
      • Wat zou er gebeuren als je wachtwoorden als gewone tekst opslaat in de database?

      📤 Inleveren

      • Screenshot van het resultaat in je browser (2x: goed en fout wachtwoord)
      • Reflectievragen in een apart bestand
      • Bestandsnamen:
        • hash-test-uitkomst-<jouw-naam>.jpg
        • hashing-reflectie-<jouw-naam>.pdf
        PDF.

      67 Salting en encryptie

      🎯 Leerdoelen

      • Je begrijpt wat een salt is en waarom het wordt gebruikt bij hashing van wachtwoorden.
      • Je kunt zelf code schrijven om te demonstreren hoe salting werkt.
      • Je kunt uitleggen hoe je een wachtwoord controleert dat is gehasht met een salt.

      💡 Uitleg: Wat is een salt?

      Een salt is een willekeurige extra waardestukje dietekst dat je aan een wachtwoord wordttoevoegt toegevoegdvoordat vóórje het wordtversleutelt gehasht.(hasht). HetDaardoor doelziet vanhet wachtwoord er elke keer anders uit, zelfs als iemand hetzelfde wachtwoord gebruikt.

      Stel: zonder salt geeft het wachtwoord geheim123 altijd dezelfde hash. Met een salt is(bijv. om!x8Zp#) tewordt voorkomenhet dat twee identieke wachtwoorden dezelfde hash opleveren.

      Als twee gebruikers bijvoorbeeld allebei "geheim123" als wachtwoord gebruiken,!x8Zp#geheim123 en je zou alleen SHA256 gebruiken, dan krijg je twee keer exact dezelfde hash. Een aanvaller zou dat kunnen misbruiken. Met een unieke salt krijgt elk wachtwoord een andere hash,hash.

      ook

      📌 alIn zijndit zevoorbeeld inhoudelijkgebruiken gelijk.we één vaste salt voor alle wachtwoorden, om het idee simpel te houden.

      Waarom is salting belangrijk?

      • Het voorkomtmaakt gebruikhet vanmoeilijker voorafom gemaaktegehashte 'hashwachtwoorden lijsten'terug te vinden met voorgeprogrammeerde lijsten (zoals rainbow tables).
      • Het maakt hetbrute moeilijker om meerdere gebruikers met hetzelfde wachtwoord te herkennen.
      • Het maakt bruteforce-force-aanvallen veel trager en minder effectief.

      🛠️ Opdracht: ZelfHashen saltenmet enéén hashenvaste salt

      Schrijf een klein PHP-script waarin jedat laat zien hoe eensalting wachtwoord wordt gehasht mét een salt.

      Gebruik de functie random_bytes() of bin2hex(random_bytes(...)) om een salt te genereren.

      Stap 1: Maak zelf een salt en combineer die met een wachtwoord.werkt.

      $wachtwoord = "geheim123";
      $salt = bin2hex(random_bytes(8))"!x8Zp#"; $gecombineerd// =vaste $salt .voor $wachtwoord;alle wachtwoorden
      
      $hash = hash("sha256", $gecombineerd)salt . $wachtwoord);
      
      echo "Salt:Wachtwoord: $salt\wachtwoord\n";
      echo "Hash: $hash\n";

      Controle bij inloggen

      StapAls 2:iemand Probeerprobeert ditin eente paarloggen, keer. Wat valtmoet je ophet aaningevoerde wachtwoord opnieuw hashen met dezelfde salt en vergelijken met de hashes?opgeslagen hash.

      Stap

      $ingevoerd 3:= Laat"geheim123";
      ook$bekende_hash zien= hoe"..."; je// lateropgehaald bij het inloggen opnieuwuit de database
      $salt gebruikt= om"!x8Zp#";
      
      het$controle_hash wachtwoord= tehash("sha256", controleren.

      $salt . $ingevoerd); if ($controle_hash === $bekende_hash) { echo "✅ Ingelogd"; } else { echo "❌ Fout wachtwoord"; }

      🧠 Reflectie

      • Waarom is het niet genoegveiliger om alleeneen salt toe te hashen zonder salt?voegen?
      • Wat gebeurt er als je per ongeluk dezelfdegeen salt gebruiktgebruikt?
      • Wat zou nog veiliger zijn dan één vaste salt voor meerdere gebruikers?
      • Hoe kan een aanvaller nog steeds proberen een gehasht wachtwoord te kraken, ook als er een salt wordt gebruikt?iedereen?

      📤 Inleveren

      • Je PHP-script waarin je laat zien hoe je een wachtwoord hasht met een salt hasht.en controleert bij inloggen.
      • Een PDF met de antwoorden op de reflectievragen.