Достаточно ли подготовленных операторов MySQLi для предотвращения внедрения SQL?

1

Здесь задан вопрос о браке. Я ищу перспективу, специфичную для расширения MySQLi.

В связанном соборе вопрос, перефразируемый вывод - нет, подготовленные заявления PDO не на 100% достаточны для предотвращения SQL-инъекции. Существуют определенные граничные случаи и настройки PDO, которые уязвимы для SQL-инъекции.

Мой вопрос заключается в том, что MySQLi подготовил инструкции на 100%, достаточные для предотвращения SQL-инъекций, или у этого также есть определенные настройки, которые нам нужно обновить, чтобы быть полностью безопасными?

Спасибо за любую помощь!

  • 1
    Похоже, что ответ на вопрос брата охватывает все вопросы. У вас есть более конкретный вопрос, который не рассматривается в брате? Для обзора: вам нужно отключить эмулированные подготовленные операторы и избегать смешивания кодировок сервера и клиентской библиотеки. Я полагаю, что единственный известный эксплойт для параметризованных запросов использует именно несоответствие кодировок gbk.
  • 0
    Вы используете функции PDO или mysqli_ *?
Показать ещё 3 комментария
Теги:
security
mysqli
sql-injection
prepared-statement

2 ответа

2

Подготовленные утверждения - это функция сервера, а не функция клиентской библиотеки. Каждая клиентская библиотека mysql для PHP - pdo, mysql и mysqli - использует библиотеку libmysqlclient и полагается на нее для функций. PDO - единственная библиотека, которая добавляет концепцию эмулируемых подготовленных операторов.

Все обсуждения о безопасности использования подготовленных операторов применяются ко всем клиентским библиотекам одинаково. (кроме PDO, когда он использует эмулированные подготовленные операторы, и вы сохраняете данные в кодировке gbk, и вы не соглашаетесь с настройкой набора символов на сервере и в клиентской библиотеке (кстати, это единственная известная слабость против добавок)

  • 0
    Спасибо за ответ, я одобрил ваш ответ, но, с уважением, если мы говорим, что обсуждение безопасности с использованием подготовленных заявлений применимо в равной степени, за исключением такого и такого крайнего случая, тогда я не считаю его равным. Подготовленные операторы действительно являются функцией базы данных, поэтому ваша основная точка зрения принята; вы можете взаимодействовать с базой данных по-разному, но в конечном итоге вы используете одну и ту же функцию. Мне менее понятны все настройки по умолчанию, о которых мне нужно знать при использовании mysqli.
  • 0
    Я полагаю, что я недостаточно понимаю исходный вопрос. Я предполагаю, что вы хотите получить ответы, похожие на вопрос о родном брате, но ориентированные именно на mysqli вместо pdo_mysql. Вот почему я говорю, что все точно так же, за исключением граничного случая gbk. (что крайне гипотетично, потому что никто не сохраняет свои данные в gbk, даже китайцы)
Показать ещё 2 комментария
1

Да, подготовленных операторов достаточно, чтобы предотвратить SQL-инъекцию, но только если вы всегда их используете.

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

  • 0
    Я ценю ответ, но я полностью смущен противоречивыми утверждениями.
  • 0
    Используйте готовые заявления, они полезны везде, кроме нескольких незначительных случаев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню