Возможный дубликат:
SQL-инъекция, которая распространяется вокруг mysql_real_escape_string ()
Я не видел ни оценки, ни устаревшей информации об этом. Итак, есть этот вопрос: Does mysql_real_escape_string () ПОЛНОСТЬЮ защищает от SQL-инъекции? Тем не менее, он очень устарел (его от '09), так как в php 5.3 и mysql 5.5 в '12 он полностью защищен?
mysql_real_escape_string ALONE может ничего не предотвращать .
Более того, эта функция не имеет ничего общего с инъекциями.
Всякий раз, когда вам нужно ускользнуть, вам это нужно, несмотря на «безопасность», но просто потому, что это требуется синтаксисом SQL. И там, где вам это не нужно, побег не поможет вам даже немного.
Использование этой функции прост: когда вам нужно использовать строку с кавычками в запросе, вам нужно избежать ее содержимого. Не из-за каких-то воображаемых «злонамеренных пользователей», а просто для того, чтобы избежать этих кавычек, которые использовались для разграничения строки. Это чрезвычайно простое правило, но крайне ошибочное для PHP-пользователей.
Это просто связанная с синтаксисом функция, а не связанная с ней безопасность.
В зависимости от этой функции в вопросах безопасности, полагая, что она «защитит вашу базу данных от вредоносных пользователей», приведет вас к инъекции.
Вывод, который вы можете сделать сами:
Нет, этой функции недостаточно .
Подготовленные заявления также не являются серебряной пулей. Он закрывает спину только для половины возможных случаев. См. Важное дополнение, которое я сделал к известному вопросу для деталей
долгое время с тех пор, как я прочитал сообщение в блоге об этом, чтобы он больше не поддерживал себя, НО …
В сообщениях говорилось, что если бы у вас были кодированные символы в кодировке Юникод, они были бы упущены реальной escape-строкой, но были бы оценены движком mysql – намекая на мысль, что вы действительно можете быть открыты для хорошо помещенной инъекции.
Я не могу вспомнить сообщение в блоге, но этот вопрос здесь находится в одном и том же парке.
Да. Правильно экранируя строку, используя собственные функции escape-функции mysql, невозможно «вырваться» и выполнить запрос.
Однако лучше использовать готовые заявления. Это будет делать несколько вещей. Используя подготовленные заявления, вы пользуетесь еще большей оптимизацией из базы данных и должным образом избегаете любых переданных данных. Взгляните на: http://php.net/manual/en/mysqli.prepare.php