Probleem:
Toepassing beveiligen tegen sql injection. Sql injection is een manier om in get of post argumenten sql doorgeven. Zoals bijvoorbeeld:
$wachtwoord = $_POST[’wachtwoord’];
// maak verbinding met DB
$result = query(”SELECT geheimeinfo FROM tabel WHERE
wachtwoord=’$wachtwoord’”);
Dan als we nu doorgeven in plaats van wachtwoord ‘a’ OR ‘1′ dan zal altijd True gekeerd worden.
Oplossing:
1. escape de ‘$wachtwoord’ variabele met ‘addslashes’ of ‘mysql_real_escape_string‘. Bijvoorbeeld:
$wachtwoord = $_POST[’wachtwoord’];
// maak verbinding met DB
$result = query(”SELECT geheimeinfo FROM tabel WHERE
wachtwoord=’ . addslashes($wachtwoord) . ‘”);
2. gebruik prepared statements met de mysqli of de PDO Mysql extensies. Dat is zoals in C en python:
$wachtwoord = $_POST[’wachtwoord’];
// maak verbinding met DB
$stmt = $DB->prepare(”SELECT geheimeinfo FROM tabel WHERE wachtwoord = ?”);
$stmt->bind_param(”s”, $wachtwoord);
$stmt->bind_result($geheimeinfo);
if ($stmt->execute && $stmt->fetch())
{
// OK
}
else
{
// niet OK
}
$stmt->close();
