PHP SQL Injection

Uit Byte Docs

Een belangrijke categorie van beveiligingslekken in webapplicaties, is die van SQL injectie. Deze lekken ontstaan doordat gebruikersinput niet wordt gecontroleerd op ongewenste code (zgn "input validation"). Een malafide gebruiker kan zo bijvoorbeeld SQL queries aanpassen die door de applicatie worden uitgevoerd.

Een voorbeeld is de volgende PHP code :

$wachtwoord = $_POST[['wachtwoord']];
// maak verbinding met DB
$result = query("SELECT geheimeinfo FROM tabel WHERE
: wachtwoord='$wachtwoord'");

Iemand kan nu een formulier invullen, waardoor de inhoud van de $wachtwoord variable bijvoorbeeld is:

a' OR '1

Nu zal de SQL query altijd informatie teruggeven, wat het wachtwoord ook was. Andere mogelijkheid: toevoegen van extra queries (bijvoorbeeld "; DROP TABLE tabel").

Twee manieren om dit tegen te gaan zijn:

  • 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='" . mysql_real_escape_string($wachtwoord) . "'");
  • gebruik prepared statements met de mysqli of de PDO Mysql extensies. Bijvoorbeeld (met mysqli):
$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();

Zie ook Php Veiligheid

De huidige waardering is: 56/100 (10 stemmen)
 You need to enable JavaScript to vote
  • Deze pagina is het laatst bewerkt op 9 feb 2012 om 16:45.
  • Deze pagina is 2.218 keer bekeken.

We proberen de kwaliteit van onze kennisbank voortdurend te verbeteren.
Geef de informatie op deze pagina een waardering met de slider hierboven.