PDO менен PHPдеги суроолордун көйгөйлөрү

Сиз буга чейин билишиңиз керек, 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-инъекция жүргүзүңүз сиздин базаңызга.