DANFA

PHP: Функция filter_var()

Одним из важнейших этапов в разработке веб-приложений является проверка и очистка пользовательского ввода. Незащищённая передача данных от пользователя может привести к серьезным проблемам безопасности, таким как SQL-инъекции, XSS-атаки и злоупотребления API. Именно поэтому правильное очищение и проверка данных — обязательный этап для любого серьёзного проекта.

Именно здесь приходит на помощь встроенная функция PHP — filter_var(). В этой статье мы подробно рассмотрим, как она работает, какие опции доступны и как её использовать для надежной обработки данных.

Что такое filter_var()?


Функция  filter_var()  предназначена для фильтрации и проверки данных. Её цель — убедиться, что получаемые от пользователя данные соответствуют ожидаемым параметрам и свободны от вредоносных вставок. filter_var() способна проверять различные типы данных, включая строки, целые числа, электронные письма, URL и многое другое.

Базовый синтаксис:
mixed filter_var(mixed $variable, int $filtertype[, mixed $options])

  • $variable: переменная, подлежащая проверке или очистке.
  • $filtertype: тип фильтра, применяемый к переменной.
  • $options: дополнительные параметры фильтра (опционально).

Возвращаемое значение зависит от типа фильтра и успешности проверки:
  • Если проверка прошла успешно, возвращается очищенное значение.
  • Если проверка провалилась, возвращается false.

Основные типы фильтров


1. Проверка электронной почты
Проверка правильности формата электронного адреса:
$email = 'user@example.com';
if (filter_var($email, FILTER_VALIDATE_EMAIL)) {
    echo "$email — действительный e-mail.";
} else {
    echo "$email — недействительный e-mail.";
}

2. Проверка URL
Проверка формата URL:
$url = 'https://example.com/path/to/resource';
if (filter_var($url, FILTER_VALIDATE_URL)) {
    echo "$url — действительный URL.";
} else {
    echo "$url — недействительный URL.";
}

3. Целые числа
Проверка, является ли значение целым числом:
$integer = '123';
if (filter_var($integer, FILTER_VALIDATE_INT)) {
    echo "$integer — целое число.";
} else {
    echo "$integer — не целое число.";
}

4. Санитаризация данных
Иногда нужно очистить строку от нежелательных символов, сохранив сам смысл данных. Например, убрать HTML-теги из текста:
$htmlString = "<b>Bold Text</b>";
$cleanString = filter_var($htmlString, FILTER_SANITIZE_STRING);
echo $cleanString; // Output: Bold Text

Также есть фильтр для удаления опасных символов из URL:
$unsafeUrl = 'javascript:alert("XSS");';
$safeUrl = filter_var($unsafeUrl, FILTER_SANITIZE_URL);
echo $safeUrl; // Output: javascript:alert(XSS);

Дополнительные опции фильтров
Некоторые фильтры принимают дополнительные параметры для тонкой настройки поведения. Например, можно ограничить диапазон чисел при фильтрации целых чисел:
$integer = '123';
$options = ["options" => ["min_range" => 100, "max_range" => 200]];
if (filter_var($integer, FILTER_VALIDATE_INT, $options)) {
    echo "$integer находится в диапазоне 100-200.";
} else {
    echo "$integer вне диапазона.";
}

Или ограничить длину URL:
$url = 'https://verylongdomain.example.com/';
$options = ["flags" => FILTER_FLAG_PATH_REQUIRED | FILTER_FLAG_QUERY_REQUIRED];
if (filter_var($url, FILTER_VALIDATE_URL, $options)) {
    echo "$url — верный URL.";
} else {
    echo "$url — неверный URL.";
}

Функция filter_var() является мощным инструментом для защиты и очистки данных в PHP. Используя её, вы можете предотвратить большую часть рисков, связанных с небезопасным вводом данных, и обеспечить надежность вашего веб-приложения. Всегда помните о важности проверок и санитаризации данных перед их использованием в приложении.
Автор:  08.10.2025 03:52:58 pm