Matatizo ya Miradi ya PDO katika PHP
Kama unavyopaswa kujua tayari, miradi ya SQL inakabiliwa na mashambulizi ya SQL. Ugani wa PDO umeundwa kupambana na mashambulizi hayo, lakini kwa kawaida, kihalisi, haifanyi hivyo otuomatiki.
Tutaangalia tatizo hili kwa kutumia mfano. Tuchukulie tuna mradi ufuatao, ambao utabadilishwa na thamani ya kutofautiana:
<?php
$sql = "SELECT * FROM users WHERE id=$id";
$res = $pdo->query($sql);
?>
Tuchukulie kutofautiana kwetu inatoka mahali pengine ngeni, kwa mfano, kutoka kwa parameta ya GET. Kwa urahisi, hata hivyo, wacha tu weka thamani yake kwa mikono. Tunatarajia thamani ya nambari, kwa mfano, hii:
<?php
$id = 1;
?>
Hacker mbaya, hata hivyo, anaweza kutuma
thamani ifuatayo (tukichukulia kuwa tuna
sehemu role):
<?php
$id = '-1 OR role="admin"';
?>
Hii inasababisha, tulitaka mradi ufuatao:
<?php
$sql = "SELECT * FROM users WHERE id=1";
$res = $pdo->query($sql);
?>
Lakini tukapata ufuatao, ambao unavuta mtaalamu wa tovuti:
<?php
$sql = "SELECT * FROM users WHERE id=-1 OR role="admin"";
$res = $pdo->query($sql);
?>
Ili kuepuka hali kama hii, katika PDO kuna utaratibu maalum uliopangwa, unaoitwa miradi iliyotayarishwa. Tutayachambua katika somo linalofuata.
Kwa makusudi fanya shambulio la SQL kwa msingi wako wa data.