PHP да PDO суроваларидаги муаммолар

Сиз билишингиз керакки, SQL суровлари SQL-инъекцияларига учрайди. PDO кенгайтмаси инъекцияларга қарши кураши учун яратилган, лекин оддий ҳолда, сунъий холда, у бу ишни қилмайди.

Келинг, муаммони мисолда кўрамиз. Фарз қилайлик, бизда куйидаги суров бор, унга ўзгарувчи киритилган:

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

Фарз қилайлик, бизнинг ўзгарувчимиз қаердир ташқаридан келади, масалан, GET-параметридан. Оддийлик учун, аммо, келинг унинг қийматини қўлда киритайлик. Биз бирор сонли қиймат кутямиз, масалан, куйидаги:

php<?php
  $id = 1;
?>

Бирок, ёмон хакер куйидаги қийматни юбора олади (бизда role) майдони бор деб ҳисоблаймиз):

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

Маълум булдики, биз куйидаги суровни хохлаган эдик:

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

Аммо куйидагини олдик, у эса веб-сайт администраторини олиб беради:

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

Бундай вазиятдан қочиш учун, PDO да махсус механизм тадким этилган, у тайёрланган суровлар деб аталади. Уларни кейинги дарсда кўриб чиқамиз.

Задание 1

Ўз базазингизга қарши SQL-инъекцияни амалга оширинг.