Intereting Posts
PHP-переписывание URL-адресов с использованием htaccess Использование PHP для создания скриншотов из источника HTML Как объединить общие каталоги Zend Framework 2 Загрузка файла с помощью AngularJS с скриптом php-сервера Есть ли функция, чтобы сделать копию массива PHP другой? как получить элементы из опции <datalist> в php Загрузочная разбивка по страницам встроенная реализация Сгенерированное изображение с использованием PHP и GD отключается Laravel Назад на страницу со старым вводом для проверки Как преобразовать логическое значение в строку PHP password_verify (), похоже, не работает Я не могу сортировать коллекцию продуктов по категориям id Параметр Bool из jQuery Ajax получен как буквальная строка «false» / ​​«true» в PHP Как я могу получить доступ к глубокому объекту, названному как переменная (точечная нотация) в php? Помещение запятой (,) в конец массива. Это соглашение?

Почему подготовленные заявления защищают от инъекций?

Я пришел далеко, чтобы получить базовое понимание подготовленных операторов, и я понимаю, что они предотвращают атаки SQL-инъекций. Но мне еще предстоит понять, ПОЧЕМУ они защищают от указанных атак. Я знаю, что есть похожие вопросы, но я не нашел ответы полностью удовлетворительными.

Пример – очень опасный код
Итак, у нас есть самый простой способ общения с нашей базой данных:

$query = "SELECT * FROM users where id=$username"; 

Без какой-либо защиты пользователь может вводить вредоносный код и, таким образом, «обманывать» механизм базы данных для выполнения разрушительного запроса:

 $username = "1; DROP TABLE users;" SELECT * FROM users where id=1; DROP TABLE users; 

Я не понимаю, как подготовленное заявление удается «отфильтровать» такие данные. Что за механика стоит за этим, не заманивает базу данных для создания такого SQL-запроса, как показано выше? Так же просто, как избежать определенных символов, таких как точка с запятой в приведенном выше примере, или это сложнее?

Если бы я сделал точную инъекционную атаку, как в примере, но запустил ее через подготовленный оператор, какая командная строка достигнет ядра базы данных?