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