PDO менен PHPдеги суроолордун көйгөйлөрү
Сиз буга чейин билишиңиз керек, SQL суроолору SQL-инъекцияларга дуушар болот. PDO кеңейтмеси инъекциялар менен күрөшүүгө арналган, бирок жөн гана, демейки абалда, ал муну жасабайт.
Көйгөйгө мисал аркылуу карап көрөлү. Бизде төмөнкү суроо болсун, ага өзгөрмө киргизилет:
<?php
$sql = "SELECT * FROM users WHERE id=$id";
$res = $pdo->query($sql);
?>
Биздин өзгөрмөбүз сырттан келет деп коёлу, мисалы, GET-параметринен. Жөнөкөйлүктүн үчүн, бирок, жөн гана анын маанисин кол менен белгилейли. Биз бир сандык маани күтөбүз, мисалы, төмөнкүдөй:
<?php
$id = 1;
?>
Зордукчу хакер, бирок, төмөнкү
маанини бере алат (бизде
role деген талаа бар деп эсептейбиз):
<?php
$id = '-1 OR role="admin"';
?>
Анда биз төмөнкү суроону күттүк:
<?php
$sql = "SELECT * FROM users WHERE id=1";
$res = $pdo->query($sql);
?>
Бирок төмөнкү суроо чыкты, ал сайттын администраторун алып чыгат:
<?php
$sql = "SELECT * FROM users WHERE id=-1 OR role="admin"";
$res = $pdo->query($sql);
?>
Ушундай жагдайдан качуу үчүн, PDOдо даярдоо суроолору деп аталуучу атайын механизм камсыз кылынган. Аларды биз кийинки сабакта талкоёбуз.
Өз каалооңуз менен SQL-инъекция жүргүзүңүз сиздин базаңызга.