Hoi Deskundigen
Ik wil mijn gastenboek beveiligen tegen database injecties.
Ik weet alleen niet zeker of ik het wel goed heb gedaan. Klopt dit zo, op de goeie plek? (ik laat een gedeelte van het script zien) Helemaal onderaan die escape functies.
<?php
$melding = ""; // Variabele voor foutmeldingen
$tekst = "";
$naam = "";
$emailadres = "";
$website = "";
// Formulier alleen verwerken als op de knop met de naam 'submit'
// EN de waarde 'Toevoegen' is geklikt:
if (isset($_POST['submit'])) {
if ($_POST['submit'] == "Toevoegen") {
$datum = date("Y-m-d");
$tijd = date("H:i:s");
$tekst = $_POST['t'];
$naam = $_POST['n'];
$emailadres = $_POST['e'];
$website = $_POST['w'];
// HTML-tags verwijderen uit de tekst met strip_tags() en
// pas DAARNA de tekst omzetten in HTML met htmlentities():
$tekst = strip_tags($tekst);
$tekst = addslashes($tekst);
$tekst = htmlentities($tekst);
// Het voorvoegsel "http://" verwijderen uit de URL van de website:
$website = eregi_replace("^http://", "", $website);
// Overige invoer omzetten in HTML-tekens, vooral voor
// de naam, want voor een e-mailadres of URL hoeft dat niet:
$naam = htmlentities($naam);
$emailadres = htmlentities($emailadres);
$website = htmlentities($website);
// Alleen een tekst van minimaal 4 tekens
// en maximaal 500 woorden toevoegen:
define("MINIMUMAANTAL_TEKENS", 4);
define("MAXIMUMAANTAL_WOORDEN", 500);
$aantal_tekens = strlen($tekst);
$aantal_woorden = str_word_count($tekst);
if (($aantal_tekens >= MINIMUMAANTAL_TEKENS) and ($aantal_woorden <= MAXIMUMAANTAL_WOORDEN)) {
// MySQL-toevoegquery opstellen:
$sql = "INSERT INTO `gastenboek` ";
$sql .= "(`bericht_id`, `datum`, `tijd`, `tekst`, `naam`, `email`, `website`) ";
$sql .= "VALUES ";
$sql .= "('', '$datum', '$tijd', '$tekst', '$naam', '$emailadres', '$website') ";
$sql .= "; ";
// Databaseverbinding openen en query uitvoeren:
require_once('mysql_connect.inc.php');
$verbinding = mysql_connect(MYSQL_SERVER, MYSQL_GEBRUIKERSNAAM, MYSQL_WACHTWOORD) or die(mysql_error());
mysql_select_db("*****") or die(mysql_error());
$toegevoegd = mysql_query($sql) or die(mysql_error());
mysql_close($verbinding);
// Browser omleiden naar het gastenboek
// als de bijdrage is toegevoegd:
if ($toegevoegd) {
header("Location: http://" . $_SERVER['HTTP_HOST'] . dirname($_SERVER['PHP_SELF']) . "/gastenboek.php");
exit;
}
} else {
// Foutmelding weergeven:
if (!($aantal_tekens >= MINIMUMAANTAL_TEKENS)) {
$melding .= "De tekst is te kort.";
}
if (!($aantal_woorden <= MAXIMUMAANTAL_WOORDEN)) {
$melding .= "Uw tekst telt " . $aantal_woorden . " woorden. ";
$melding .= "Kort de tekst in tot maximaal " . MAXIMUMAANTAL_WOORDEN . " woorden. ";
}
else {
$tekst = mysql_real_escape_string(nl2br($tekst));
$naam = mysql_real_escape_string($naam);
$emailadres = mysql_real_escape_string($emailadres);
$website = mysql_real_escape_string($website);
}
}
}
}
// Een eventuele foutmelding opmaken als een alinea:
if (strlen(trim($melding)) > 1) {
$melding = '<p class="w">' . $melding . "</p>\n";
}
1.884 views