Атака по экраннированному id использованному в составе MySQL запроса в PHP-коде

Собственно, представьте. что вы имеете некий MySQL запрос вида Select * From Table1 Where id=123. Чтобы обезопасить такую простейшую конструкцию при ее использовании в составе PHP приложения достаточно, как вам кажется, взеть » id» в функциональные скобки, таким вот образом:

$db->query( "Select * From Table1 Where id=" . mysql_real_escape_string($_GET["id"]) . "' );

Однако на самом деле данный код является потенциально уязвимым. Ведь достточно вызвать такую страницу, например, вот таким образом:

index.php?id=-777 UNION Select * From users

И вы можете допустить утечку данных, конечно с поправкой на то, что данные выводятся, используются дальше и вы знаете структуру базы.

Чтобы защититься от такого типа атаки можно просто приводить типы, таким образом

$db->query( "Select * From Table1 Where id=" . ((int)$_GET["id"]) . "' );

Либо же анализировать входящие переменные на SQL инъекцию, путем перебора.

Однако, гораздо важней выполнить аудит уже имеющегося кода, для этого можно использоваться следующую конструкцию shell:

egrep -Rin "(select|insert|update|delete|replace).*(from|set|into).*(mysql_escape_string|mysql_real_escape_string|addslashes)" . | grep -v "[\"']['\"]"

В случае, когда используется структура класса $class->ekran() для экранирования входящих данных, конечно комманды будет несколько другой:

egrep -Rin "(select|insert|update|delete|replace).*(from|set|into).*(classname->ekran|mysql_escape_string|mysql_real_escape_string|addslashes)" . | grep -v "[\"']['\"]"

Более сложный подход может быть основан на встраивании в PHP-код функции тестирования и проверки. Ведь в суматохе вполне можно вставить не экранированную конструкцию. Либо же недобросовестный коллега разработчик может сделать это за вас.

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

Атака по экраннированному id использованному в составе MySQL запроса в PHP-коде: Один комментарий

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

Ваш e-mail не будет опубликован. Обязательные поля помечены *