Problemet e kërkesave në PDO në PHP
Siç duhet ta dini tashmë, kërkesat SQL janë të prekshme nga injeksionet SQL. Zgjerimi PDO është krijuar për të luftuar injeksionet, por thjeshtë, si parazgjedhje, ai nuk e bën këtë.
Le ta shohim problemin me një shembull. Le të themi se kemi kërkesën e mëposhtme, ku futet një variabël:
<?php
$sql = "SELECT * FROM users WHERE id=$id";
$res = $pdo->query($sql);
?>
Le të themi se variabla jonë vjen nga diku jashtë, për shembull, nga një parametër GET. Për thjeshtësi, megjithatë, le t'i caktojmë vlerën e saj manualisht. Ne presim një vlerë numerike, për shembull, si kjo:
<?php
$id = 1;
?>
Një haker i lig, megjithatë, mund të kalojë
vlerën e mëposhtme (supozojmë se kemi
një fushë role):
<?php
$id = '-1 OR role="admin"';
?>
Rezulton se ne kishim ndërmend kërkesën e mëposhtme:
<?php
$sql = "SELECT * FROM users WHERE id=1";
$res = $pdo->query($sql);
?>
Por morëm kërkesën e mëposhtme, e cila nxjerr administratorin e faqes:
<?php
$sql = "SELECT * FROM users WHERE id=-1 OR role="admin"";
$res = $pdo->query($sql);
?>
Për të shmangur një situatë të tillë, në PDO është parashikuar një mekanizëm i veçantë, i cili quhet kërkesa të përgatitura. Ato do t'i shqyrtojmë në mësimin e ardhshëm.
Kryeni me qëllim një injeksion SQL në bazën tuaj të të dhënave.