PHPda PDO so'rovlaridagi muammolar
Ma'lumki, SQL so'rovlari SQL-in'ektsiyalariga uchash xavfi mavjud. PDO kengaytmasi in'ektsiyalarga qarshi kurashish uchun yaratilgan, ammo odatda, standart sozlamalar bilan, u buni avtomatik ravishda qilmaydi.
Keling, misol orqali bu muammoni ko'rib chiqaylik. Faraz qilaylik, bizda o'zgaruvchi qo'shiladigan quyidagi so'rov mavjud:
<?php
$sql = "SELECT * FROM users WHERE id=$id";
$res = $pdo->query($sql);
?>
Faraz qilaylik, bizning o'zgaruvchimiz tashqaridan keladi, masalan, GET-parametridan. Soddalik uchun, shunday deb faraz qilaylik, uni qo'lda belgilaymiz. Biz ma'lum bir raqamli qiymat kutamiz, masalan:
<?php
$id = 1;
?>
Biroq, yovuz xaker quyidagi
qiymatni uzatishi mumkin (bizda role maydoni
mavjud deb hisoblaymiz):
<?php
$id = '-1 OR role="admin"';
?>
Ma'lum bo'ladiki, biz quyidagi so'rovni xohlagan edik:
<?php
$sql = "SELECT * FROM users WHERE id=1";
$res = $pdo->query($sql);
?>
Ammo sayt administratorini o'chiradigan quyidagi so'rovni oldik:
<?php
$sql = "SELECT * FROM users WHERE id=-1 OR role="admin"";
$res = $pdo->query($sql);
?>
Bunday vaziyatdan qochish uchun, PDO da tayyorlangan so'rovlar deb ataladigan maxsus mexanizm mavjud. Ularni keyingi darsda o'rganamiz.
Ataylab o'zingizning bazangizga SQL-in'ektsiyani amalga oshiring.