Bekijk het formulier van de applicatie met de dev-tools van je
browser.
Pas met de dev-tools het hidden input veld aan van ‘red’ naar
‘blue’. Als je het formulier nu submit, zul je zien dat de PHP code niet
door heeft dat het formulier is aangepast.
Zorg dat je alleen als een gebruiker admin is hij zelf zijn kleur
mag bepalen. Anders moet het altijd rood zijn. Gebruik hiervoor de
userIsAdmin functie.
Uitwerking:
<body><div class="body-container"><h1 class="heading">Gastenboek 'De lekkage'</h1><form action="guestbook.php" method="post"> Email:<input type="email" name="email"><br /> Bericht:<textarea name="text" minlength="4"></textarea><br /><?php if (userIsAdmin($conn)) {echo"<input type=\"hidden\" name=\"admin\" value=".$_COOKIE['admin'] ."\">";echo'<input type="color" value="red" name="color">'; } ?><input type="hidden" name="token" value="<?php echo $token; ?>"><input type="submit"></form><hr /><?phpif ($_SERVER['REQUEST_METHOD'] ==='POST') {$email=$_POST['email'];$text=$_POST['text'];$admin=isset($_POST['admin']) ?1:0;if (userIsAdmin($conn)) {$color=$_POST['color'] ??'red'; } else {$color='red'; }$conn->query("INSERT INTO `entries`(`email`, `color`, `admin`, `text`) VALUES ('$email', '$color', '$admin', '$text');" ); }$result=$conn->query("SELECT `email`, `text`, `color`, `admin` FROM `entries`");foreach ($resultas$row) {print"<div style=\"color: ".$row['color'] ."\">Email: ".$row['email'];if ($row['admin']) {print'♔'; }print": ".$row['text'] ."</div><br/>"; }function userIsAdmin($conn) {if (isset($_COOKIE['admin'])) {$adminCookie=$_COOKIE['admin'];$result=$conn->query("SELECT cookie FROM `admin_cookies`");foreach ($resultas$row) {if ($adminCookie===$row['cookie']) {returntrue; } } }returnfalse; }?><hr /><div class="disclosure-notice"><p> Hierbij krijgt iedereen expliciete toestemming om dit Gastenboek zelf te gebruiken voor welke doeleinden dan ook</p><p> Onthoud dat je voor andere websites altijd je aan de principes van<a href="https://en.wikipedia.org/wiki/Responsible_disclosure" target="_blank" style="color: lightgray;"> Responsible Disclosure</a> wilt houden.</p></div></div></body>
Email validatie
Opdracht:
Pas met de dev-tools van je browser het input type
van het email veld aan.
Verifieer dat je nu vrij bent om random
tekst, dus geen email adres, op te slaan.
Pas de PHP code aan om te
controleren dat het echt een email adres is.
Uitwerking:
<body><div class="body-container"><h1 class="heading">Gastenboek 'De lekkage'</h1><form action="guestbook.php" method="post"> Email:<input type="email" name="email"><br /> Bericht:<textarea name="text" minlength="4"></textarea><br /><?php if (userIsAdmin($conn)) {echo"<input type=\"hidden\" name=\"admin\" value=".$_COOKIE['admin'] ."\">";echo'<input type="color" value="red" name="color">'; } ?><input type="hidden" name="token" value="<?php echo $token; ?>"><input type="submit"></form><hr /><?phpif ($_SERVER['REQUEST_METHOD'] ==='POST') {$email=$_POST['email'];if (filter_var($email,FILTER_VALIDATE_EMAIL)) {$text=$_POST['text'];$admin=isset($_POST['admin']) ?1:0;if (userIsAdmin($conn)) {$color=$_POST['color'] ??'red'; } else {$color='red'; }$conn->query("INSERT INTO `entries`(`email`, `color`, `admin`, `text`) VALUES ('$email', '$color', '$admin', '$text');" ); } else {echo"geen valide email"; } }$result=$conn->query("SELECT `email`, `text`, `color`, `admin` FROM `entries`");foreach ($resultas$row) {print"<div style=\"color: ".$row['color'] ."\">Email: ".$row['email'];if ($row['admin']) {print'♔'; }print": ".$row['text'] ."</div><br/>"; }function userIsAdmin($conn) {if (isset($_COOKIE['admin'])) {$adminCookie=$_COOKIE['admin'];$result=$conn->query("SELECT cookie FROM `admin_cookies`");foreach ($resultas$row) {if ($adminCookie===$row['cookie']) {returntrue; } } }returnfalse; }?><hr /><div class="disclosure-notice"><p> Hierbij krijgt iedereen expliciete toestemming om dit Gastenboek zelf te gebruiken voor welke doeleinden dan ook</p><p> Onthoud dat je voor andere websites altijd je aan de principes van<a href="https://en.wikipedia.org/wiki/Responsible_disclosure" target="_blank" style="color: lightgray;"> Responsible Disclosure</a> wilt houden.</p></div></div></body>
Admin only!
Opdracht:
Voeg het admin veld zelf toe via de dev-tools en
verstuur het formulier.
Observeer dat de php code hier geen enkel
probleem mee heeft.
Pas de php code aan zodat de admin status uit de
database gehaald wordt in plaats van op user input te vertrouwen.
Uitwerking:
<body><div class="body-container"><h1 class="heading">Gastenboek 'De lekkage'</h1><form action="guestbook.php" method="post"> Email:<input type="email" name="email"><br /> Bericht:<textarea name="text" minlength="4"></textarea><br /><?php if (userIsAdmin($conn)) {echo'<input type="color" value="red" name="color">'; } ?><input type="hidden" name="token" value="<?php echo $token; ?>"><input type="submit"></form><hr /><?phpif ($_SERVER['REQUEST_METHOD'] ==='POST') {$email=$_POST['email'];if (filter_var($email,FILTER_VALIDATE_EMAIL)) {$text=$_POST['text'];$admin=0;$color='red';if (userIsAdmin($conn)) {$admin=1;$color=$_POST['color'] ??'red'; }$conn->query("INSERT INTO `entries`(`email`, `color`, `admin`, `text`) VALUES ('$email', '$color', '$admin', '$text');" ); } else {echo"geen valide email"; } }$result=$conn->query("SELECT `email`, `text`, `color`, `admin` FROM `entries`");foreach ($resultas$row) {print"<div style=\"color: ".$row['color'] ."\">Email: ".$row['email'];if ($row['admin']) {print'♔'; }print": ".$row['text'] ."</div><br/>"; }function userIsAdmin($conn) {if (isset($_COOKIE['admin'])) {$adminCookie=$_COOKIE['admin'];$result=$conn->query("SELECT cookie FROM `admin_cookies`");foreach ($resultas$row) {if ($adminCookie===$row['cookie']) {returntrue; } } }returnfalse; }?><hr /><div class="disclosure-notice"><p> Hierbij krijgt iedereen expliciete toestemming om dit Gastenboek zelf te gebruiken voor welke doeleinden dan ook</p><p> Onthoud dat je voor andere websites altijd je aan de principes van<a href="https://en.wikipedia.org/wiki/Responsible_disclosure" target="_blank" style="color: lightgray;"> Responsible Disclosure</a> wilt houden.</p></div></div></body>