RuCore.NET

Защита форм от SQL-инекций





При разработке, более или менее больших проектов, программистам приходится использовать БД (базу данных). Чем в свою очередь обязательно пытаются воспользоваться разного рода хакеры и взломщики. В связи с этим, все данные, которые получаются из _POST или _GET запросов перед добавлением в БД нужно фильтровать.
Как производится фильтрация?
Фильтрация производится следующим образом:
$text_to_check = mysql_real_escape_string ($_GET[«запрос»]);
$text_to_check = strip_tags($text_to_check);
$text_to_check = htmlspecialchars($text_to_check);
$text_to_check = stripslashes($text_to_check);
$text_to_check = addslashes($text_to_check);
$_GET[«запрос»] = $text_to_check;
Но тут опять-же остаются вопросы: А если нужно заносить в БД какие-либо специальные символы. Выход есть:
function escape_inj ($text) {
$text = strtolower($text); // Приравниваем текст параметра к нижнему регистру
if (
!strpos($text, «select») && //
!strpos($text, «union») && //
!strpos($text, «select») && //
!strpos($text, «order») && // Ищем вхождение слов в параметре
!strpos($text, «where») && //
!strpos($text, «char») && //
!strpos($text, «from») //
) {
return true; // Вхождений нету — возвращаем true
} else {
return false; // Вхождения есть — возвращаем false
}
}
$section = $_GET[section]; // Читаем параметр
if (!escape_inj ($section)) { // Проверяем параметр
echo «Это SQL-инъекция.»;
exit ();
} else {
$result = mysql_query («SELECT * FROM `tbl_name` WHERE `section` = $section «);
… // Продолжаем работу
}
Так как SQL-инъекция в своей основе — это добавления запроса к БД, то при помощи данной процедуры мы можем убрать все левые запросы.



Поделись статьей с друзьями




40 просмотров



Сообщить об опечатке

Текст, который будет отправлен нашим редакторам: