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<?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<?php
  $id = 1;
?>

Biroq, yovuz xaker quyidagi qiymatni uzatishi mumkin (bizda role maydoni mavjud deb hisoblaymiz):

php<?php
  $id = '-1 OR role="admin"';
?>

Ma'lum bo'ladiki, biz quyidagi so'rovni xohlagan edik:

php<?php
  $sql = "SELECT * FROM users WHERE id=1";
  $res = $pdo->query($sql);
?>

Ammo sayt administratorini o'chiradigan quyidagi so'rovni oldik:

php<?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.

Задание 1

Ataylab o'zingizning bazangizga SQL-in'ektsiyani amalga oshiring.