Здесь задан вопрос о браке. Я ищу перспективу, специфичную для расширения MySQLi.
В связанном соборе вопрос, перефразируемый вывод - нет, подготовленные заявления PDO не на 100% достаточны для предотвращения SQL-инъекции. Существуют определенные граничные случаи и настройки PDO, которые уязвимы для SQL-инъекции.
Мой вопрос заключается в том, что MySQLi подготовил инструкции на 100%, достаточные для предотвращения SQL-инъекций, или у этого также есть определенные настройки, которые нам нужно обновить, чтобы быть полностью безопасными?
Спасибо за любую помощь!
Подготовленные утверждения - это функция сервера, а не функция клиентской библиотеки. Каждая клиентская библиотека mysql для PHP - pdo, mysql и mysqli - использует библиотеку libmysqlclient и полагается на нее для функций. PDO - единственная библиотека, которая добавляет концепцию эмулируемых подготовленных операторов.
Все обсуждения о безопасности использования подготовленных операторов применяются ко всем клиентским библиотекам одинаково. (кроме PDO, когда он использует эмулированные подготовленные операторы, и вы сохраняете данные в кодировке gbk, и вы не соглашаетесь с настройкой набора символов на сервере и в клиентской библиотеке (кстати, это единственная известная слабость против добавок)
Да, подготовленных операторов достаточно, чтобы предотвратить SQL-инъекцию, но только если вы всегда их используете.
Нет, подготовленные утверждения недостаточны для предотвращения SQL-инъекций, поскольку не все параметры являются параметрируемыми, например, некоторые команды set
, однако это можно смягчить с помощью белых списков и/или регулярного выражения.