Как API базы данных PDO защищает ваше приложение от SQL-инъекций?

Люди, как правило, становятся религиозными, выбирая API базы данных PDO вместо mysqli. Часто на вопросы, касающиеся mysqli, отвечают такие утверждения, как «Забудьте о mysqli, используйте PDO». Это безопасный путь». Итак, я продолжаю, вникая в эту концепцию PDO, готовя утверждения и связывая их и т. д.

Но что особенного? Почему люди прилагают усилия, чтобы использовать эту базу данных таким образом? Как это защищает ваше приложение от SQL-инъекций?


person Lee    schedule 12.05.2014    source источник
comment
Вы случайно все путаете. mysql с mysqli и безопасность с удобством использования   -  person Your Common Sense    schedule 12.05.2014
comment
В любом случае, это дубликат stackoverflow.com/a/14112684/285587 и пары других.   -  person Your Common Sense    schedule 12.05.2014
comment
Спасибо. Путаница — это преувеличение. Мне просто очень любопытно, почему PDO считается лучшей практикой для подключения к базе данных MySQL.   -  person Lee    schedule 12.05.2014
comment
Вы, как программист, защищаете свое приложение от инъекций, PDO делает это проще, чем mysqli. Вы по-прежнему можете экспортировать свой код для инъекций даже с PDO.   -  person i--    schedule 12.05.2014
comment
В посте, на который я ссылаюсь, есть сквозное объяснение, начиная с которого возникает проблема выбора: mysqli или PDO? утверждение   -  person Your Common Sense    schedule 12.05.2014
comment
Я читаю это прямо сейчас. Это превосходно.   -  person Lee    schedule 12.05.2014


Ответы (1)


PDO не является защитой от SQL-инъекций. Вы по-прежнему можете писать крайне опасные внедряемые запросы сколько угодно в PDO, и PDO будет все равно.

Что делает PDO, так это предоставляет ИНСТРУМЕНТЫ, которые позволяют вам безопасно писать запросы.

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

person Marc B    schedule 12.05.2014
comment
Я этого не знал. Итак, этот вопрос следует переписать... Какие инструменты PDO предоставляет для предотвращения SQL-инъекций, которых нет в mysqli? - person Lee; 12.05.2014
comment
никто. они оба поддерживают заполнители, которые являются защитным механизмом предотвращения. у них также есть точно такой же механизм выхода, который обеспечивает старая школа mysql_real_escape_string(), когда вы НЕ МОЖЕТЕ использовать заполнители. - person Marc B; 12.05.2014
comment
+1 Я говорю людям, что PDO предотвращает внедрение SQL, как зубная щетка предотвращает кариес. :) - person Bill Karwin; 12.05.2014