Cyber Security 2
5 SQL Injection in PHP
๐ฏ Leerdoelen
- Je begrijpt wat een SQL Injection is en waarom het gevaarlijk is.
- Je kunt zelf een simpele SQL Injection uitvoeren op een onveilige PHP-pagina.
- Je kunt uitleggen hoe je dit soort aanvallen voorkomt.
๐ก Uitleg
Bij een SQL Injection wordt misbruik gemaakt van een fout in je code, waarbij de invoer van een gebruiker direct in een SQL-query wordt gezet. Als je niet oppast, kan een hacker zo gegevens uit je database stelen of zelfs verwijderen.
Een klassiek voorbeeld is een inlogformulier waarin de gebruikersinvoer zonder controle in de query komt te staan:
<?php
$conn = new mysqli("localhost", "root", "", "testdb");
$username = $_POST['username'];
$password = $_POST['password'];
$sql = "SELECT * FROM users WHERE username = '$username' AND password = '$password'";
$result = $conn->query($sql);
if ($result->num_rows > 0) {
echo "Welkom!";
} else {
echo "Ongeldige login.";
}
?>
Als een aanvaller het volgende invoert:
Gebruikersnaam: ' OR '1'='1
Wachtwoord: watdanook
dan wordt de SQL-query dit:
SELECT * FROM users WHERE username = '' OR '1'='1' AND password = 'watdanook'
Omdat '1'='1' altijd waar is, kan de aanvaller inloggen zonder wachtwoord te kennen.
๐ ๏ธ Opdracht โ Voer een SQL Injection uit
- Maak een database
testdb
met een tabelusers
:CREATE TABLE users ( id INT AUTO_INCREMENT PRIMARY KEY, username VARCHAR(255), password VARCHAR(255) );
- Voeg een gebruiker toe:
INSERT INTO users (username, password) VALUES ('admin', 'admin123');
- Maak een PHP-bestand
login.php
met bovenstaande onveilige code. - Maak een formulier met twee velden:
username
enpassword
. - Voer een SQL-injection uit zoals hierboven uitgelegd. Wat gebeurt er?
๐ ๏ธ Vervolgopdracht โ Beveilig je formulier
- Pas de code aan zodat je gebruik maakt van prepared statements:
<?php
$conn = new mysqli("localhost", "root", "", "testdb");
$username = $_POST['username'];
$password = $_POST['password'];
$stmt = $conn->prepare("SELECT * FROM users WHERE username = ? AND password = ?");
$stmt->bind_param("ss", $username, $password);
$stmt->execute();
$result = $stmt->get_result();
if ($result->num_rows > 0) {
echo "Welkom!";
} else {
echo "Ongeldige login.";
}
?>
- Test of de SQL Injection nu nog werkt. Leg uit waarom het niet meer lukt.
๐ง Reflectie
- Waarom is SQL-injection zo gevaarlijk voor een website?
- Wat had de originele programmeur moeten doen om dit te voorkomen?
- Gebruik je op je eigen sites al veilige manieren om met invoer om te gaan?
๐ค Inleveren
- Maak twee screenshots:
- Eรฉn van je geslaagde SQL-injection
- Eรฉn van je beveiligde code in actie (met foutmelding bij ongeldige login)
- Lever ook een korte toelichting en je reflectie in als .pdf of .txt
- Bestandsnamen:
sqlinjectie-.jpg
sqlinjectie-reflectie-.pdf
6 Cross-Site Scripting (XSS)
๐ฏ Leerdoelen
- Je weet wat Cross-Site Scripting (XSS) is en hoe het werkt.
- Je kunt zelf een XSS-aanval uitvoeren in een onveilige webpagina.
- Je kunt uitleggen hoe je je website kunt beschermen tegen XSS.
๐ก Uitleg
Wat is XSS?
Cross-Site Scripting (XSS) is een aanval waarbij een aanvaller kwaadaardige scripts (zoals JavaScript) invoert in een formulier of URL. Deze scripts worden dan uitgevoerd in de browser van een andere bezoeker.
Stel: je maakt een gastenboek waar mensen een berichtje kunnen achterlaten. Als je hun invoer niet goed filtert, kan iemand dit invoeren:
<script>alert('Ik ben gehackt!')</script>
Iedereen die daarna het gastenboek bezoekt, krijgt dan deze melding te zien โ het script wordt uitgevoerd alsof het van jouw site komt.
๐ ๏ธ Opdracht โ Voer een XSS-aanval uit
- Maak een PHP-bestand
gastenboek.php
met het volgende formulier en afhandelingscode:
<form method="post">
Naam: <input name="naam"><br>
Bericht: <textarea name="bericht"></textarea><br>
<input type="submit" value="Verstuur">
</form>
<?php
if ($_POST) {
echo "<h3>Bericht ontvangen:</h3>";
echo "<p>Van: " . $_POST['naam'] . "</p>";
echo "<p>" . $_POST['bericht'] . "</p>";
}
?>
- Voer nu als bericht het volgende in:
<script>alert('XSS test')</script>
- Wat gebeurt er?
๐ ๏ธ Vervolgopdracht โ Beveilig je formulier
- Pas de PHP-code aan zodat gebruikersinvoer wordt ge-escaped:
echo "<p>Van: " . htmlspecialchars($_POST['naam']) . "</p>";
echo "<p>" . htmlspecialchars($_POST['bericht']) . "</p>";
- Voer nogmaals het script in. Wat gebeurt er nu?
๐ง Reflectie
- Wat maakt XSS zo gevaarlijk voor je bezoekers?
- Wat is het verschil tussen
htmlspecialchars()
enstrip_tags()
in PHP? - Hoe zou jij in een groter project XSS voorkomen?
๐ค Inleveren
- Screenshot van de popup bij onveilige invoer
- Screenshot van veilige invoer na beveiliging
- Toelichting op je reflectie
- Bestandsnamen:
xss-aanval-.jpg
xss-veilige-versie-.jpg
xss-reflectie-.pdf
7 Social Engineering en Phishing
๐ฏ Leerdoelen
๐ก Uitleg
Wat is social engineering?
- Iemand belt je zogenaamd namens IT en vraagt om je wachtwoord.
- Een mailtje zegt dat je โdirect moet inloggenโ om je account te redden.
Wat is phishing?
Phishing is een vorm van social engineering waarbij iemand zich voordoet als een betrouwbare partij (zoals je bank, school of DigiD) om je inloggegevens of andere data te stelen.
Meestal gebeurt dit via e-mail of nepsites die lijken op de echte.
๐ ๏ธ Opdracht โ Herken phishing
- Bekijk 3 voorbeelden van phishingmails of nepsites. Gebruik bijv. de site fraudehelpdesk.nl.
- Beantwoord de volgende vragen:
- Wat valt je op aan de mail of site?
- Wat klopt er niet?
- Wat zou jij doen als je deze mail ontvangt?
๐ ๏ธ Opdracht โ Bouw een (veilige) nep-loginpagina
Maak een HTML-pagina met de opmaak van een bekende site (bv. Instagram, Facebook of je school), maar sla de invoer lokaal op of toon het resultaat in het scherm. Je gebruikt dit puur om de aanvalstechniek te begrijpen โ NIET om iemand mee te misleiden!
<form method="post">
Gebruikersnaam: <input name="username"><br>
Wachtwoord: <input type="password" name="password"><br>
<input type="submit" value="Login">
</form>
<?php
if ($_POST) {
echo "<p>Opgevangen gegevens:</p>";
echo "Gebruiker: " . $_POST['username'] . "<br>";
echo "Wachtwoord: " . $_POST['password'];
}
?>
- Maak je site herkenbaar door een waarschuwing toe te voegen dat het een oefening is.
๐ง Reflectie
- Waarom werken phishingaanvallen zo goed, denk je?
- Wat zou jij doen als je twijfelt aan een mail of site?
- Hoe zou je jouw ouders of opa/oma uitleggen hoe ze phishing kunnen herkennen?
๐ค Inleveren
- Een kort verslag van je analyse van 3 phishingvoorbeelden
- Een screenshot van je lokale oefen-phishingsite met zichtbaar ingevulde gegevens
- Reflectie op hoe je social engineering in het dagelijks leven herkent
- Bestandsnamen:
phishing-analyse-.pdf
phishingsite-.jpg
phishing-reflectie-.pdf