Фильтры PHP используются для проверки и фильтрации данных из незащищенных источников, таких как вводимые пользователем данные.
Фильтры PHP используются для проверки и фильтрации данных из незащищенных источников.
Тестирование, проверка и фильтрация пользовательского ввода или пользовательских данных являются важными частями любого веб-приложения.
Расширения фильтров PHP предназначены для упрощения и ускорения фильтрации данных.
Почти все веб-приложения полагаются на внешние данные. Эти данные обычно поступают от пользователей или других приложений (например, веб-сервисов). Используя фильтры, вы можете гарантировать, что ваше приложение получит правильный тип входных данных.
Всегда следует фильтровать внешние данные!
Фильтрация ввода — одна из наиболее важных тем безопасности приложений.
Что такое внешние данные?
Ввод данных из формы
Файлы cookie
Данные веб-сервисов
переменные сервера
Результаты запроса к базе данных
Чтобы фильтровать переменные, используйте одну из следующих функций фильтра:
filter_var() — фильтровать одну переменную через указанный фильтр.
filter_var_array() — фильтровать несколько переменных одними и теми же или разными фильтрами.
filter_input — принимает входную переменную и фильтрует ее
filter_input_array — принимает несколько входных переменных и фильтрует их через одни и те же или разные фильтры.
В следующем примере мы проверяем целое число с помощью функции filter_var():
<?php $int = 123 , если ( ! filter_var ( $int , FILTER_VALIDATE_INT ) ) { echo ( " Не допустимое целое число " ) ; еще { echo ( " является допустимым целым числом " ) ; ?>
В приведенном выше коде для фильтрации переменных используется фильтр «FILTER_VALIDATE_INT».
Если мы попытаемся использовать нецелочисленную переменную (например, «123abc»), на выходе будет: «Целое число недействительно».
Полный список функций и фильтров можно найти в нашем Справочном руководстве по фильтрам PHP.
Существует два типа фильтров:
Проверка фильтра:
Используется для проверки ввода пользователя
Строгие правила форматирования (например, проверка URL-адреса или электронной почты)
Возвращает ожидаемый тип в случае успеха или FALSE в случае неудачи.
Дезинфицирующий фильтр:
Используется для разрешения или запрета указанных символов в строке.
Нет правил формата данных
всегда возвращает строку
Параметры и флаги используются для добавления дополнительных параметров фильтрации к указанному фильтру.
Разные фильтры имеют разные параметры и флаги.
В следующем примере мы проверяем целое число с помощью filter_var() с параметрами «min_range» и «max_range»:
<?php $var = 300 ; $int_options = массив ( " опции " => массив ( « min_range » => 0 , « max_range » => 256 ) ) ; если ( ! filter_var ( $var , FILTER_VALIDATE_INT , $int_options ) ) { echo ( " Недопустимое целое число " ) ; еще { echo ( " допустимое целое число " ) ; ?>
Как и в приведенном выше коде, параметры необходимо поместить в связанный массив под названием «options». Если вы используете флаги, они не обязательно должны находиться в массиве.
Поскольку целое число равно «300», что выходит за пределы указанного диапазона, вывод приведенного выше кода будет:
не является допустимым целым числом
Полный список функций и фильтров можно найти в нашем Справочном руководстве по фильтрам PHP. Вы можете увидеть доступные параметры и флаги для каждого фильтра.
Давайте попробуем проверить ввод из формы.
Первое, что нам нужно сделать, это подтвердить, что искомые входные данные существуют.
Затем мы используем функцию filter_input() для фильтрации входных данных.
В следующем примере входная переменная «email» передается на страницу PHP:
<?php if ( ! filter_has_var ( INPUT_GET , « электронная почта » ) ) { echo ( " Нет параметра электронной почты " ) ; еще { если ( ! filter_input ( INPUT_GET , " электронная почта " , FILTER_VALIDATE_EMAIL ) ) { эхо « Недействительный адрес электронной почты » } еще { эхо « Это законное электронное письмо » } ; } ?>
В приведенном выше примере входная переменная (электронная почта) передается с помощью метода GET:
Проверьте, существует ли входная переменная «email» типа «GET».
Если входная переменная существует, проверьте, является ли она действительным адресом электронной почты.
Попробуем очистить URL, переданный из формы.
Во-первых, мы хотим подтвердить, что искомые входные данные существуют.
Затем мы используем функцию filter_input() для очистки входных данных.
В следующем примере входная переменная «url» передается на страницу PHP:
<?phpif(!filter_has_var(INPUT_GET, "url")){ echo("Нет параметра URL");}else{ $url = filter_input(INPUT_GET, "url", FILTER_SANITIZE_URL); echo $url;}?>
В приведенном выше примере входная переменная (url) передается с помощью метода GET:
Проверьте, существует ли входная переменная «url» типа «GET».
Если эта входная переменная существует, очистите ее (удалив недопустимые символы) и сохраните в переменной $url.
Если входная переменная представляет собой строку, подобную этой: «http://www.ruåånoøøob.com/», очищенная переменная $url будет выглядеть следующим образом:
Формы обычно состоят из нескольких полей ввода. Чтобы избежать повторных вызовов функции filter_var или filter_input, мы можем использовать функцию filter_var_array или filter_input_array.
В этом примере мы используем функцию filter_input_array() для фильтрации трех переменных GET. Полученные переменные GET — это имя, возраст и адрес электронной почты:
<?php $filters = массив ( " имя " => массив ( " фильтр " => FILTER_SANITIZE_STRING ) , " возраст " => массив ( " фильтр " => FILTER_VALIDATE_INT , " опции " => массив ( « min_range » => 1 , « max_range » => 120 ) ) , " электронная почта " => FILTER_VALIDATE_EMAIL ) ; $ result = filter_input_array ( INPUT_GET , $filters ) ; ( ! $result [ " возраст " ] ) { echo ( " Возраст должен быть между 1 и 120. <br> " ) ; elseif ( ! $result [ " электронная почта " ] ) { echo ( " Электронная почта незаконна <br> " ) ; еще { echo ( " Введено правильно " ) ; ?>
В приведенном выше примере есть три входные переменные (имя, возраст и адрес электронной почты), передаваемые методом GET:
Устанавливает массив, содержащий имена входных переменных и фильтры для указанных входных переменных.
Вызовите функцию filter_input_array(), параметры включают входную переменную GET и только что установленный массив.
Проверьте, имеют ли переменные age и email в переменной $result недопустимые входные данные. (Если ввод недопустим, входная переменная имеет значение FALSE после использования функции filter_input_array().)
Вторым аргументом функции filter_input_array() может быть массив или идентификатор одного фильтра.
Если этот параметр является идентификатором одного фильтра, то указанный фильтр будет фильтровать все значения во входном массиве.
Если параметр является массивом, массив должен соответствовать следующим правилам:
Должен быть ассоциативным массивом, содержащим входные переменные, являющиеся ключами массива (например, входная переменная «возраст»).
Значением этого массива должен быть идентификатор фильтра или массив, определяющий фильтр, флаги и параметры.
Используя фильтр FILTER_CALLBACK, вы можете вызвать пользовательскую функцию и использовать ее в качестве фильтра. Таким образом, мы имеем полный контроль над фильтрацией данных.
Вы можете создать свою собственную функцию или использовать существующую функцию PHP.
Укажите функцию фильтра, которую вы собираетесь использовать, так же, как указанную опцию. В ассоциативном массиве с именем «опции».
В следующем примере мы используем пользовательскую функцию для преобразования всех «_» в «.»:
<?php функция конвертировать пространство ( $строка ) { возвращаться str_replace ( " _ " , " . " , $ string ) ; $string = " www_codercto_com! " ; эхо filter_var ( $string , FILTER_CALLBACK , array ( " options " = > " convertSpace " ) ) ;
В приведенном выше примере все «_» преобразуются в «.»:
Создайте функцию, которая заменяет "_" на "."
Вызовите функцию filter_var() с фильтром FILTER_CALLBACK и массивом, содержащим нашу функцию.