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

phpБезопасность сайта во многом зависит от фильтрации данных поступающих со стороны пользователя. Любой пользователь является заведомо опасным объектом, который может причинить вред намеренно или случайно.
Для повышения безопасности сайта следует проверять все входные переменные на достоверность.
Основные этапы:

  • 1) Чтение переменных из массивов POST, GET и других;
  • 2) Разделение переменных по типам и приведение их к нужным типам;
  • 3) Фильтрация строковых переменных

1 Этап
Чтение переменных лучше всего производить в начале скрипта. Тем самым все операции будут находится в одном месте и позволят более просто найти какую-либо недоработку или ошибку.
Пример: $a1=@$_GET[«nomer»];
Символ @ применяется для принудительной заглушки ошибок в случае отсутствия переменной nomer в массиве GET.

2 Этап
Каждая переменная изначально должна иметь свой тип: число, строка, символ, дата или другой. Все типы оговариваются на стадии проектирования программы и входные переменные должны быть строго соответствовать необходимым типам.
Пусть в 1 примере тип переменной целое число, тогда для фильтрации данных достачно сделать приведение переменную $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);

В 1 строке применяется функция преобразования html тегов в сущности(коды).
Далее вырезается оператор MySQL update. Подобным образом можно вырезать любые подозрительные элементы.

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

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