Защита от SQL-инъекции

Прежде, чем выполнять запрос

$res = mysql_query("SELECT * FROM news WHERE id = '.$_GET['id'].'");

нужно сначала проверить значение переменной id. В данном случае переменная id имеет числовой тип и должна принимать только целочисленное значение. В таком случае помогает функция intval, которая  преобразует переменную к целому типу.

$_GET['id']   = intval($_GET['id']);

Таким образом мы исключаем возможность внедрения SQL-запроса.


Понравилась статья? Поделиться с друзьями:
Комментарии: 5
  1. Сергей

    Я раньше так от SQL injection атак защищался :)

    //%s - строка
    //%d - целое число

    $q = "SELECT * FROM `users` WHERE `login`='%s' AND `id`='%d'";
    $query = sprintf($q, mysql_reql_escape_string($login), $id);
    $res  = mysql_query($query);
    

    Сейчас использую PDO и подготовленные выражения.

    1. FORTRESS-DESIGN (автор)

      Из-за повышенной безопасности выполнения SQL-инъекций?

  2. Сергей

    Вы про PDO?

    PDO не только повышенная безопасность, но и быстродействие, а так же можно при необходимости перейти от MySQL к другой СУБД, например: PostgreSQL, SQLite.

    1. FORTRESS-DESIGN (автор)

      Да, о PDO. Часто ли вам приходилось использовать другие базы данных?

  3. ulot3049

    Здравствуйте, больше информации по этой теме можно найти тут: http://lifeexample.ru/php-primeryi-skriptov/zashhita-ot-sql-inektsiy.html

    P.S. Очень маленькая у вас статья (( Мало полезной инфы.

Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: