Фильтрация данных

Всегда стоит проверять запросы поступающие к базе данных, например через формы поиска на сайте, формы регистрации и так далее, на предмет вредоносных данных. Это может быть опасный PHP или JavaScript способный нанести вред вашему ресурсу, а так же что самое опасное – это могут быть команды серверу. Говорить о возможностях опытного хакера, который наткнулся на не проверяемое поле на сайте просто глупо – он сможет всё! Все начинается от практически безобидного редиректа и заканчивается полным крахом сервера.

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

Основные этапы:
1) Анализ переменных, точнее массивов $_POST и $_GET;
2) Разделение переменных;
3) Фильтрация строковых переменных

Первый этап – Анализ переменных

Проверяйте входные переменные в самом начале вашего кода, не допускайте к работе с функциями и запросами к базе данных ещё не проверенные, потенциально опасные данные от пользователей. Таким образом, все защищаемые функции будут находиться в одном определённом месте или даже файле.

Пример: $anyVar=@$_GET["number"]; Символ @ применяется для «игнорирования» интерпретатором ошибок в случае отсутствия переменной number в массиве GET.

Второй этап – Разделение переменных
Всем переменным, еще на стадии проектирования программы, должен быть присвоен определенный тип, будь это число или строка. Лучше всего проверять переменные на необходимый ей тип, например:

Тип нашей переменной целое число, тогда для фильтрации данных достачно сделать приведение переменной $anyVar к целому типу:

$anyVar =@$_GET["number"];
$anyVar =intval($anyVar);

 

Например злоумышленник ввел в строке запроса ?number =45X35 в результате обработки переменная $anyVar примет значение 45.

Нельзя так же забывать и о диапазонах значений. Для этого следует проверить переменную на диапазон. Пусть $anyVar находится в пределе от 1 до 100, тогда проверка будет следующей:
if (($anyVar<1)||($anyVar>100)) $anyVar=1;

Из примера видно, что происходит принудительное присвоение переменной $anyVar значения 1 в случае нарушения.

Третий этап – Фильтрация строковых переменных

Особо опасны текстовые переменные, например поле для ввода поискового запроса по сайту. Данные поля просто необходимо проверять на наличие вредоносного кода. Для устранения опасности производится удаление некоторых элементов из полученного текста или замена на другие символы.

Как правило, удаляются html-теги, php-вставки и конструкции запросов к базе MySQL.

$anyVar =htmlspecialchars($anyVar,ENT_QUOTES,"cp1251");
$anyVar =str_replace("update","",$anyVar);
 

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


Защитный код
Обновить

Разработчику

Скрипты