2010-06-12 3 views
0

Я использую mysql_real_escape_string ($ _ REQUEST ['page']) в своем коде. Может ли он предотвратить SQL Injection в моем php-коде еще, что мне нужно будет сделать больше защиты?Php sql injection protection

Благодаря

+0

Нет, это не так. mysql_real_escape_string поможет только с строками –

ответ

0

Да, но prepared statements лучше.

+0

Как объяснить, почему? – symcbean

+0

Намного сложнее случайно не преобразовать переменную, если вы делаете это как часть подготовленного синтаксиса оператора, тогда, если вы объединяете полдюжины переменных в строку. – Quentin

0

Лично я бы отказался от расширения mysql и перешел на расширение mysqli. Проблема с расширением mysql заключается в том, что его старый, и, откровенно говоря, довольно легко забыть что-то избежать.

mysqli имеет поддержку prepared statements, а также имеет API ООП, который облегчает его разработку.

Когда вы начинаете использовать prepared statements, это облегчает отслеживание ваших параметров. Это также автоматически ускользает от них для вас.

0

Я бы также рекомендовал использовать подготовленные инструкции в большинстве случаев, но это необходимо только при вставке данных, которые поступают от пользователя, который может быть строкой. Подготовленные заявления более дорогие (производительность), поэтому, когда вы можете их избежать, вам, вероятно, придется. Существует много преимуществ использования подготовленных операторов и/или транзакций базы данных. Вероятно, вам стоит заглянуть в нее, если у вас ее уже нет.

Если вы получаете числовые значения, например, из формы, вам просто нужно обеспечить качество данных путем преобразования ввода в число (любой ввод из GET или POST ВСЕГДА рассматривается как строки PHP, если вы их не конвертируете), и любой вредоносный код будет удален.

Вот пример:

$intCarAge = (int) $_POST['car_age']; 
mysqli_query("UPDATE cars SET car_age = " . $intCarAge . " WHERE id = '123' "); 

"(INT)" преобразует данные в входной переменной $ _POST [ ''] car_age к ряду (целое число). Он может быть добавлен перед любой переменной в вашем коде. Любые буквы внутри переменной будут удалены, и любые числа будут сохранены. You can read more about number conversion here.

Надеюсь, что я был полезен!