Я использую mysql_real_escape_string ($ _ REQUEST ['page']) в своем коде. Может ли он предотвратить SQL Injection в моем php-коде еще, что мне нужно будет сделать больше защиты?Php sql injection protection
Благодаря
Я использую mysql_real_escape_string ($ _ REQUEST ['page']) в своем коде. Может ли он предотвратить SQL Injection в моем php-коде еще, что мне нужно будет сделать больше защиты?Php sql injection protection
Благодаря
Да, но prepared statements лучше.
Лично я бы отказался от расширения mysql
и перешел на расширение mysqli
. Проблема с расширением mysql
заключается в том, что его старый, и, откровенно говоря, довольно легко забыть что-то избежать.
mysqli
имеет поддержку prepared statements, а также имеет API ООП, который облегчает его разработку.
Когда вы начинаете использовать prepared statements, это облегчает отслеживание ваших параметров. Это также автоматически ускользает от них для вас.
Я бы также рекомендовал использовать подготовленные инструкции в большинстве случаев, но это необходимо только при вставке данных, которые поступают от пользователя, который может быть строкой. Подготовленные заявления более дорогие (производительность), поэтому, когда вы можете их избежать, вам, вероятно, придется. Существует много преимуществ использования подготовленных операторов и/или транзакций базы данных. Вероятно, вам стоит заглянуть в нее, если у вас ее уже нет.
Если вы получаете числовые значения, например, из формы, вам просто нужно обеспечить качество данных путем преобразования ввода в число (любой ввод из 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.
Надеюсь, что я был полезен!
Нет, это не так. mysql_real_escape_string поможет только с строками –