ВНИМАНИЕ: Запись на курсы по HTML, CSS, JavaScript, PHP, Python, React, Vue, Laravel и другим фреймворкам и CMS,
а также: помощь в поиске работы и заказов, стажировка на реальных проектах→
⊗ppSpPDQu 70 of 95 menu
Новый формат обучения! Репетиторство по программированию. Есть еще 3 свободных места! Жми для подробностей.

Проблемы запросов в 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-инъекцию к вашей базе.

byenru