Создание,поддержка, продвижение сайтов
Тел.: (495) 506-0343

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

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

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

Основные этапы:

  1. Анализ переменных, точнее массивов POST и GET;
  2. Разделение переменных;
  3. Фильтрация строковых переменных

1 этап. Анализ переменных

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

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

2 этап. Разделение переменных

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

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

$a1=@$_GET["nomer"];
$a1=intval($a1);

Например злоумышленник ввел в строке запроса ?nomer=43X34 в результате обработки переменная $a1 примет значение 43.

Нельзя забывать о диапазонах значений. Для этого следует проверить переменную на диапазон. Пусть $a1 находится в пределе от 1 до 100, тогда проверка будет следующей:

if (($a1<1)||($a1>100)) $a1=1;

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

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

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

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

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






Вернуться к списку новостей