Защищает ли класс mysqli в PHP 100% от SQL инъекций? - PullRequest
4 голосов
/ 03 марта 2009

Я видел много статей и вопросов о mysqli, и все они утверждают, что он защищает от SQL-инъекций. Но это доказательство дурака, или есть еще способ обойти это. Меня не интересуют межсайтовые скрипты или фишинговые атаки, только SQL-инъекции.

Для начала я должен был сказать, что я использую подготовленные заявления. Вот что я имел в виду с mysqli. Если я использую подготовленные операторы без конкатенации строк, то надежно ли это?

Ответы [ 2 ]

14 голосов
/ 03 марта 2009

Но это дурак или еще есть какой-то способ обойти это.

Нет, ты должен знать, что ты делаешь. Если вы используете связанные параметры (функция, которая поставляется с MySqli), вы полностью защищены от атак типа инъекций с этого вектора атаки . Это не мешает вам - программисту - встраивать строки напрямую и тем самым разрешать атаки с использованием инъекций. Вы должны использовать эту функцию по назначению.

Re: Редактировать

Для начала я должен был сказать, что я использую подготовленные заявления. Вот что я имел в виду с mysqli. Если я использую подготовленные операторы без конкатенации строк, то надежно ли это?

Надежная защита - все еще такое опасное слово. Но вы защищены от инъекционных атак для переменных, которые связаны с помощью подготовленных операторов. Это связано с тем, что связанные параметры передаются отдельно от запроса SQL. При «традиционном» подходе встраивания строки серверу базы данных необходимо проанализировать входные данные, и в этом есть множество крайних случаев (Charsets и т. Д.). Когда данные и запрос отправляются отдельно, фактический анализ не выполняется (по крайней мере, не выполняется анализ переменных данных).

0 голосов
/ 03 марта 2009

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

...