![]() |
|
Модераторы: skyboy, MoLeX, Aliance, ksnk |
![]()
|
|
| Golda |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 460 Регистрация: 26.3.2007 Где: Ариель, Израиль Репутация: 6 Всего: 42 |
Доброе время суток всем!
В последнее время все extensions для работы с базами данных стали поддерживать prepared statements. Позиционируется это как вопрос *) производительности (запрос передается и анализируется, подготавливается к выполнению один раз, а дальше только передавайте данные) *) защита от SQL-инъекций (ею занимается сам механизм prepared statements). Вот в основном с последним связан мой вопрос. За счет чего это достигается? Prepared statements - этот самый хранимый на сервере проанализированный и подготовленный к исполнению вариант - это уже не SQL вообще, а нечто другое, а посему и попытка SQL-инъекции, привязанной к синтаксису SQL, бессмысленна? Или дело просто в том, что экранирующая функция вызывается автоматически движком, поддерживающим prepared statements (прочитала где-то), и защита достигается тем, что движек не дает программисту возмоджности забыть заэкранировать потенциально опасную часть команды SQL? Если можно, дайте ссылку на информацию по этому поводу. -------------------- "For every problem, there exists a simple and elegant solution which is absolutely wrong." -- J. Wagoner, U.C.B. Mathematics |
|||
|
||||
| sTa1kEr |
|
||||
|
9/10 программиста ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1553 Регистрация: 21.2.2007 Репутация: 9 Всего: 146 |
Golda,
Естественно все передаваемые параметры экранируются движком автоматически, но безопасность достигается так же счет самой логики. При подготовке запроса все параметры считаются исключительно константами, которые никак не затрагивают структуру запроса. Т.е. если в обычном случае можно было писать запросы вроде
при этом, даже экранировав спецсимволы во всех переменных, сами запросы бы прекрасно работали, то с использованием prepared statements - это не возможно, MySQL просто громко выругается еще при подготовке запроса. Т.о. в prepared statements просто исключена ситуация когда параметр может выступать в качестве ключевого слова, функции итп и гарантирует, что запрос всегда выполнится корректно.
Интересных ссылочек, к сожалению, не нашел. |
||||
|
|||||
| Golda |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 460 Регистрация: 26.3.2007 Где: Ариель, Израиль Репутация: 6 Всего: 42 |
Спасибо
-------------------- "For every problem, there exists a simple and elegant solution which is absolutely wrong." -- J. Wagoner, U.C.B. Mathematics |
|||
|
||||
![]()
|
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | PHP: Базы Данных | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |