В этой статье мы рассмотрим, почему так важно фильтровать все, что встроено в наши приложения. В частности, мы рассмотрим, как проверять и очищать сторонние данные в PHP.
Никогда (никогда!) не доверяйте чужому вводу в своем приложении. Это один из самых важных уроков для любого, кто разрабатывает веб-приложение.
Внешним вводом может быть что угодно — из входных данных $_GETи $_POST формы, некоторых элементов в теле HTTP-запроса или даже некоторых значений в $_SERVERсуперглобальном файле. Файлы cookie, значения сеанса и загруженные и загруженные файлы документов также считаются внешними входными данными.
Каждый раз, когда мы обрабатываем, выводим, включаем или объединяем сторонние данные в наш код, существует потенциальный вектор для злоумышленников для внедрения кода в наше приложение (так называемые атаки путем внедрения ). Из-за этого нам нужно убедиться, что каждый фрагмент посторонних данных правильно отфильтрован, чтобы его можно было безопасно включить в приложение.
Когда дело доходит до фильтрации, есть два основных типа: проверка и очистка.
Проверка
Валидация гарантирует, что иностранный ввод будет таким, каким мы его ожидаем. Например, мы можем ожидать адрес электронной почты, поэтому мы ожидаем что-то с ********@*****.***форматом. Для этого мы можем использовать FILTER_VALIDATE_EMAILфильтр. Или, если мы ожидаем логическое значение, мы можем использовать FILTER_VALIDATE_BOOLфильтр PHP.
Среди наиболее полезных фильтров — FILTER_VALIDATE_BOOL, FILTER_VALIDATE_INTи FILTER_VALIDATE_FLOATдля фильтрации основных типов и FILTER_VALIDATE_EMAILи FILTER_VALIDATE_DOMAINдля фильтрации электронных писем и доменных имен соответственно.
Еще один очень важный фильтр — это фильтр, FILTER_VALIDATE_REGEXPкоторый позволяет нам фильтровать регулярное выражение. С помощью этого фильтра мы можем создавать собственные фильтры, изменяя регулярное выражение, по которому мы фильтруем.
Sanitization
Санитизация — это процесс удаления недопустимых или небезопасных символов из постороннего ввода.
Лучший пример этого — дезинфицировать входные данные базы данных перед их вставкой в необработанный SQL-запрос.
Опять же, некоторые из наиболее полезных фильтров очистки включают фильтры для очистки основных типов, таких как FILTER_SANITIZE_STRING, FILTER_SANITIZE_CHARSи, а FILTER_SANITIZE_INTтакже для очистки URL-адресов и электронных писем.FILTER_SANITIZE_URLFILTER_SANITIZE_EMAIL
filter_var() и filter_input()
Теперь, когда мы знаем, что в PHP есть полный набор доступных фильтров, нам нужно знать, как их использовать.
Применение фильтра осуществляется с помощью функций filter_var()и.filter_input()
Функция filter_var()применяет указанный фильтр к переменной. Он будет принимать значение для фильтрации, применяемый фильтр и необязательный массив параметров. Например, если мы пытаемся проверить адрес электронной почты, мы можем использовать это:
<?php $email = your.email@sitepoint.com: if ( filter_var( $email, FILTER_VALIDATE_EMAIL ) ) { echo ("This email is valid"); }
Если бы целью было очистить строку, мы могли бы использовать это:
<?php $string = "<h1>Hello World</h1>"; $sanitized_string = filter_var ( $string, FILTER_SANITIZE_STRING); echo $sanitized_string;
Функция filter_input()получает сторонний ввод из ввода формы и фильтрует его.
Она работает так же, как и filter_var()функция, но принимает тип входных данных (мы можем выбрать из GET, POST, COOKIE, SERVERили ENV), переменную для фильтрации и фильтр. При желании он также может принимать множество параметров.
Еще раз, если мы хотим проверить, отправляется ли внешняя входная переменная «email» через GETнаше приложение, мы можем использовать это:
<?php if ( filter_input( INPUT_GET, "email", FILTER_VALIDATE_EMAIL ) ) { echo "The email is being sent and is valid."; }
Заключение
И это основы фильтрации данных в PHP. Для фильтрации посторонних данных могут использоваться и другие методы, например применение регулярных выражений, но методов, которые мы рассмотрели в этой статье, более чем достаточно для большинства случаев использования.
Убедитесь, что вы понимаете разницу между проверкой и очисткой и как использовать функции фильтра. Благодаря этим знаниям ваши PHP-приложения станут более надежными и безопасными!