Задать вопрос
woonem
@woonem

Зачем prepared statements? Почему не экранирование?

Чем обусловлено предпочтение экранирования ввода использованию prepared statements для защиты от SQL-инъекций?
Почему mysql_real_escape_string() небезопасна?

Заранее извиняюсь за каламбур - я не уверен в верности смысла выражения "предпочтение одного другому".
  • Вопрос задан
  • 1600 просмотров
Подписаться 1 Оценить Комментировать
Решения вопроса 3
Losted
@Losted
Software Architect
Вручную легко что-нибудь упустить. Заодно Prepared Statement находится в прекомпилированном состоянии (как минимум в java) - это уменьшает время вызова.
Ответ написан
sivabur
@sivabur
Заблокировали просто так!
1. Дырявий + устаревшая функция которая в последней версии помоему уже удаленна собсвенно один из способов обхода https://exelab.ru/f/index.php?action=vthread&forum...

2.prepared подготовленыи запросы- т. е. один раз а сервак шлется шаблон а потом при каждом новом запросе будут слаться тока данные(в общех чертах).

Вообщем mysql_real_escape_string() колхоз еще тот уже как более 5-ти лет.
Ответ написан
@res2001
Developer, ex-admin
Вставлю свои 5 копеек.
Не знаю как с MySQL, а в MS SQL и Oracle prepared statements подставляются в запрос в ядре базы данных, а не в какой-то левой библиотеке, непонятно кем написанной и не известно на сколько криво используемой.
Кому как не самой СУБД лучше всего знать что и как экранировать? К тому же СУБД воспринимает prepared statements именно как параметры запроса, они никогда не смогут быть выполнены.
Как-то так, имхо.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 3
@neol
Потому что экранирование можно забыть (а если что-то возможно, то это рано или поздно произойдёт).
С prepared statements такой проблемы нет.

PS Забудьте про mysql_real_escape_string, его больше нет. И вообще всех функций mysql_* больше нет.
Ответ написан
alexey-m-ukolov
@alexey-m-ukolov Куратор тега PHP
Тем, что это более логичный шаг - вы ведь точно знаете, какой запрос хотите выполнить, гораздо правильнее сделать шаблон и заполнять его данными, чем выполнять абы что.
Ответ написан
skobkin
@skobkin
Гентушник, разработчик на PHP и Symfony.
У них есть разные плюсы. Например, вы можете использовать их по прямому назначению: подготовить запрос и подставлять разные значения в цикле.
Ну и все функции mysql_* - deprecated.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы