Probleem met navrae in PDO in PHP
Soos jy reeds moet weet, is SQL-navrae vatbaar vir SQL-inspuitings. Die PDO-uitbreiding is bedoel om inspuitings te bekamp, maar net so, by verstek, doen dit dit nie.
Kom ons kyk na die probleem met 'n voorbeeld. Gestel ons het die volgende navraag, waarin 'n veranderlike ingevoeg word:
<?php
$sql = "SELECT * FROM users WHERE id=$id";
$res = $pdo->query($sql);
?>
Gestel ons veranderlike kom van êrens van buite, byvoorbeeld, van 'n GET-parameter. Vir eenvoud, laat ons egter net die waarde daarvan met die hand stel. Ons verwag 'n numeriese waarde, byvoorbeeld so een:
<?php
$id = 1;
?>
'n Kwaadwillige hacker kan egter die
volgende waarde stuur (ons aanvaar ons het
'n veld role):
<?php
$id = '-1 OR role="admin"';
?>
Dit beteken dat ons die volgende navraag wou hê:
<?php
$sql = "SELECT * FROM users WHERE id=1";
$res = $pdo->query($sql);
?>
Maar ons het die volgende gekry, wat die webwerfadministrateur uithaal:
<?php
$sql = "SELECT * FROM users WHERE id=-1 OR role="admin"";
$res = $pdo->query($sql);
?>
Om so 'n situasie te vermy, het PDO 'n spesiale meganisme voorsien, wat voorbereide navrae genoem word. Ons sal dit in die volgende les ondersoek.
Doen doelbewus 'n SQL-inspuiting op jou databasis.