Hallo allemaal,
ik heb een scriptje in elkaar gezet om mijn portfolio te voorzien van een 'admin panel'
ik wil dat mensen via het contactformulier op mijn website iets in mijn database zetten (INSERT INTO), en dat ik ze vervolgens uit kan lezen op een bepaalde pagina op mijn site (het 'admin panel').
dit is allemaal redelijk gelukt. Via het contactformulier kan ik de drie velden (naam, email, bericht) in mijn database zetten. en op een andere pagina kan ik ze weer opvragen.
maar mijn vraag is nu: Hoe beveilig ik deze formulieren tegen sql injections / xss etc? Ik heb hier totaal geen verstand van en heb de formulieren ook aan de hand van een tutorial gemaakt.
hier de scripts:
process.php
<?php
//kijken of formulier is ingevuld en variabelen aanmaken
if(!empty($_POST)){
$name = $_POST['name'];
$emailaddress = $_POST['emailaddress'];
$message = $_POST['message'];
// Database Verbinden
require_once('config.php');
// Query opzetten
$query = "INSERT INTO emailmessages (name, emailaddress, message) VALUES ('".$name."', '".$emailaddress."', '".$message."')";
// Alles naar de database versturen en teruglinken naar hoofdpagina.
if (mysqli_query($link, $query) == true)
{
header("Location: success.html");
exit;
} else {
die("De gegevens zijn niet opgeslagen in de database.");
}
} else {
header("Location: index.html");
exit;
}
?>
Toon Meer
showemails.php
<?php
// Database Verbinden
require_once('config.php');
// Query om berichten aan te roepen uit database
$query = "SELECT * FROM emailmessages";
// Laat gegevens zien op de pagina
$result = mysqli_query($link, $query);
while($row = mysqli_fetch_assoc($result))
{
?>
<strong>Naam:</strong> <?php echo $row['name']; ?> </br>
<strong>E-mail Adres:</strong> <?php echo $row['emailaddress']; ?> </br>
<strong>Bericht:</strong> <?php echo $row['message']; ?> </br>
</br>
</br>
<hr>
<?php
}
?>
Toon Meer
en verder het stukje html van het formulier.
<form method="post" action="process.php">
<div class="row half">
<div class="6u"><input type="text" class="text" name="name" placeholder="Naam" /></div>
<div class="6u"><input type="text" class="text" name="emailaddress" placeholder="E-Mail" /></div>
</div>
<div class="row half">
<div class="12u">
<textarea name="message" placeholder="Bericht"></textarea>
</div>
</div>
<div class="row">
<div class="12u">
<a href="#" class="button submit">Verstuur Bericht</a>
</div>
</div>
</form>
Toon Meer
edit:
nu heb ik volgend script gevonden op internet, en ik heb gelezen dat je deze bovenin de pagina moest includen om het tegen sql injection te beveiligen?
maar werkt dit script ook voor mijn formulier?
<?php
// bescherming tegen mysql injection
function quote_smart($value)
{
if (get_magic_quotes_gpc()) {
$value = stripslashes($value);
}
if (version_compare(phpversion(), "4.3.0") == "-1") {
return mysql_escape_string($value);
} else {
return mysql_real_escape_string($value);
}
}
function check_array(&$array)
{
foreach ($array as $key => $value) {
$value = quote_smart($value);
$array[$key] = $value;
}
}
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
check_array($_POST);
}
if ($_SERVER['REQUEST_METHOD'] == 'GET') {
check_array($_GET);
}
?>
Toon Meer