Класс mysqli в PHP защищает 100% от инъекций sql?

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

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

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

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

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

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

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

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