Готовые заявления в PDO действительно повышают безопасность? - PullRequest
2 голосов
/ 22 декабря 2009

Интересно, действительно ли эти подготовленные операторы PDO повышают безопасность или они просто «дешевый» текст-заменитель в запросе? Смысл подготовленных операторов в том, что все, что вставлено в качестве параметра, не будет анализироваться СУБД как часть самой инструкции, поэтому такой параметр, как

"'; DROP TABLE foobar;"

не имеет никакого эффекта и не прерывает запрос. Кто-нибудь знает это подробно? Я думал использовать PDO с подготовленными заявлениями для предотвращения внедрения SQL. Оказывается, их трудно использовать (и они даже не работают, по крайней мере, на моей локальной машине), поэтому я хочу это выяснить, прежде чем тратить гораздо больше времени на PDO;

Ответы [ 2 ]

11 голосов
/ 22 декабря 2009

Создание подготовленного оператора отправляет запрос с символами подстановки на сервер для анализа и возвращает токен для вызова этого оператора.

Вызов просто включает отправку данных, привязанных к каждому параметру. Это означает, что данные не будут анализироваться (поскольку они не являются частью строки запроса) и что структура запроса фиксируется при разборе подготовленного оператора и не может быть изменена путем внедрения.

Так что, да, готовое утверждение определенно повышает безопасность.

Это также означает, что вам не придется нести накладные расходы на разбор, если вы повторно используете подготовленный оператор для нескольких запросов.

3 голосов
/ 22 декабря 2009

Да, они повышают безопасность. PDO или MySQLi также увеличивает скорость по сравнению с обычными методами MYSQL в PHP, поскольку данные передаются в более компактной форме.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...