Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Базы Данных > что собой представляют prepared statements


Автор: Golda 21.5.2007, 22:09
Доброе время суток всем!

В последнее время все extensions для работы с базами данных стали поддерживать prepared statements. Позиционируется это как вопрос 
*) производительности (запрос передается и анализируется, подготавливается к выполнению один раз, а дальше только передавайте данные)
*) защита от SQL-инъекций (ею занимается сам механизм prepared statements).

Вот в основном с последним связан мой вопрос. За счет чего это достигается? Prepared statements - этот самый хранимый на сервере проанализированный и подготовленный к исполнению вариант -  это уже не SQL вообще, а нечто другое, а посему и попытка SQL-инъекции, привязанной к синтаксису SQL, бессмысленна? Или дело просто в том, что экранирующая функция вызывается автоматически движком, поддерживающим prepared statements (прочитала где-то), и защита достигается тем, что движек не дает программисту возмоджности забыть заэкранировать потенциально опасную часть команды SQL?

Если можно, дайте ссылку на информацию по этому поводу. 

Автор: sTa1kEr 24.5.2007, 18:12
Golda, 
Естественно все передаваемые параметры экранируются движком автоматически, но безопасность достигается так же счет самой логики. При подготовке запроса все параметры считаются исключительно константами, которые никак не затрагивают структуру запроса. Т.е. если в обычном случае можно было писать запросы вроде
Код

$query = "SELECT * FROM `Table` ORDER BY `$field`";
$query = "SELECT `$field` AS Value FROM `Table`";
$query = "SELECT * FROM `Table` WHERE `Field` $operator '$value'";

при этом, даже экранировав спецсимволы во всех переменных, сами запросы бы прекрасно работали, то с использованием prepared statements - это не возможно, MySQL просто громко выругается еще при подготовке запроса. Т.о. в prepared statements просто исключена ситуация когда параметр может выступать в качестве ключевого слова, функции итп и гарантирует, что запрос всегда выполнится корректно.

Цитата
Если можно, дайте ссылку на информацию по этому поводу.

Интересных ссылочек, к сожалению, не нашел.

Автор: Golda 24.5.2007, 22:51
Спасибо

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)