Как подготовленные операторы PHP PDO предотвращают внедрение SQL? Каковы другие преимущества использования PDO? Использование PDO снижает эффективность? - PullRequest
11 голосов
/ 04 января 2012

Я заметил предложение PHP PDO's prepared statements prevents SQL injection.

  • Как php PDO (подготовленные операторы PDO) предотвращают инъекцию sql?
  • Каковы другие плюсы / минусы использования PDO (подготовленные заявления PDO)?
  • Снижает ли эффективность использование PDO (подготовленные операторы PDO)?

Я прочитал это: Достаточно ли подготовленных операторов PDO для предотвращения внедрения SQL? Но данные там не совсем понятны.

Ответы [ 3 ]

8 голосов
/ 04 января 2012

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

Как подготовленные операторы php pdo предотвращают внедрение sql?

Как подготовленные операторы могут защитить от атак с использованием SQL-инъекций?

Какие еще плюсы / минусы использования PDO?

Самый интересный вопрос.
AНаибольший недостаток PDO: он торгует и распространяет серебряную пулю, еще одного кумира для поклонения.
Хотя без понимания это не принесет никакой пользы, как любой другой инструмент.
PDO имеет некоторые ключевые функции, такие как

  • Абстракция базы данных. Это миф, поскольку он не изменяет сам синтаксис SQL.И вы просто не можете использовать автоинкрементные идентификаторы mysql с Postgre.Не говоря уже о том, что переключение драйверов баз данных не входит в число частых решений разработчиков.
  • Поддержка заполнителей, реализация собственных подготовленных операторов или их эмуляция. Хороший подход, но очень ограниченный.Отсутствуют необходимые типы заполнителей, такие как идентификатор или заполнитель SET.
  • вспомогательный метод для получения всех записей в массив без записи цикла. Только один.Когда вам нужно по крайней мере 4, чтобы сделать вашу работу разумной и менее скучной.

Снижает ли использование PDO эффективность?

Опять же, это не PDO, ноготовые высказывания, снижающие эффективность.Это зависит от задержки в сети между сервером db и вашим приложением, но вы можете считать ее незначительной для большинства реальных случаев.

1 голос
/ 04 января 2012

Как подготовленные операторы php pdo предотвращают инъекцию sql

Вместо того, чтобы раздражать придиркой к этому вопросу, я дам вам ответ на реальный вопрос: prepare если запрос по существу выполняет mysql_real_esape_string или некоторый эквивалент на каждом токене (представлен знаком вопроса или * 1005) *). Это позволяет убедиться, что все переменные данные правильно экранированы. Это не предотвращает все проблемы безопасности (например, % и _ не экранированы, что может повлиять на предложения LIKE).

Каковы другие плюсы / минусы использования PDO?

Насколько я знаю, нет никаких минусов в использовании PDO. Я предполагаю, что недостатком является то, что он не поддерживает все известные БД. Есть ограниченные драйверы, но это только недостаток, если вы хотите использовать PDO для БД, которую он не может поддерживать. Плюсы? Что ж, вы получаете большую гибкость от PDO, особенно если вы создаете для него оболочку (на всякий случай, если вам нужно переключить администраторов баз данных), и, поскольку она скомпилирована в C, она предположительно быстрее, чем при использовании других функций php (см. Ниже). Это также избавляет вас от необходимости писать собственные методы для подготовки запросов и т. Д.

Снижает ли использование PDO эффективность

Снизить эффективность по сравнению с чем? Какая эффективность? Эффективность программирования или скорость исполнения? Насколько я понимаю, PDO скомпилирован, поэтому его использование должно быть на быстрее , чем создание собственной оболочки БД для подготовки запросов и тому подобного. Если это действительно проблема, вы можете сравнить разницу, но я предлагаю вам сначала поискать замедления в других местах.

1 голос
/ 04 января 2012
  1. Основной метод, используемый PDO для предотвращения внедрения SQL, - это подготовка операторов с параметрами в запросе и предоставление значений при выполнении запроса. PDO автоматически позаботится о экранировании кавычек и других символов в значениях. Пока вы делаете это в каждом запросе, а не помещаете значения непосредственно в запрос, вы защищены от внедрения SQL. Ответы на вопрос, который вы связали, чтобы показать, как это делается.

  2. Одним из основных преимуществ использования PDO или любого DBA является то, что PDO инкапсулирует низкоуровневую связь с фактической DB, оставляя вам только иметь дело с реальной логикой запроса. Это позволяет вам с минимальными усилиями изменить, какую базу данных вы используете (MySQL, Postgre и т. Д.). Это также облегчает работу с основными / ведомыми настройками и чтение реплик.

  3. В большинстве случаев использование PDO будет только незначительно медленнее, чем прямые вызовы функций. В любом случае, небольшое снижение производительности того стоит.

...