popov . dev

Главная

Библиотека

Статьи

Проверка и обраб...

Проверка и обработка ввода на PHP с помощью Filter_Input() и Filter_Var()

Никогда не доверяйте данным от пользователей.

Это аксиома и хороший совет. Итак, как тогда быть? Пользователь может передать данные так как это задумывает разработчик, однако не всегда пользователи придерживаются правил и используют наши сайты по назначению. Обращаясь к концепции "Многоуровневой безопасности" нужно понимать что пользователи могут отправлять запросы не со стандартными текстовыми значениями, могут отправлять код из ваших форм который если должным образом не обработать может привести к получению привилегий на сайте или повредить ваш сайт или базу. Итак, у вас есть:

  • Подготовленные инструкции для остановки SQL-инъекции
  • Экранирование выходных данных для XSS-атак
  • Токены для CSRF

Добавим к этому списку еще один элемент: проверка и очистка входных данных с помощью функций filter_input() и filter_var() в PHP. Теперь, вы можете сделать что-то вроде следующего:

<?php $name = filter_var($_POST['name'], FILTER_SANITIZE_STRING); ?>

Код запускает $_POST запрос с элементом name через FILTER_SANITIZE_STRING, который в свою очередь обрезает теги, и опционально удаляет или экранирует специальные символы. Вы можете ознакомиться с полным списком доступных фильтров здесь.

Вы также можете выполнить проверку следующим образом:

<?php $email = filter_var($_POST['email'], FILTER_VALIDATE_EMAIL); ?>

Наш код проверяет, является ли значение синтаксически правильным адресом электронной почты. Если это неверный адрес электронной почты, filter_var() возвращает значение false, что в свою очередь означает, что вы можете сделать проверку по другому:

<?php
$email = filter_var($_POST['email'], FILTER_VALIDATE_EMAIL);

if ( $email === false ) {
 // Обработка неправильных email
 }
?>

При желании вы можете использовать filter_input() следующим образом:

<?php
$name = filter_input(INPUT_POST, "name", FILTER_SANITIZE_STRING);
$email= filter_input(INPUT_POST, "email", FILTER_VALIDATE_EMAIL);
$search = filter_input(INPUT_GET, "s", FILTER_SANITIZE_STRING);
?>

И так далее. У вас также есть filter_var_array() и filter_input_array() для фильтрации целых массивов сразу С уникальными флагами для каждого элемента.

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

Комментарии

Для того чтобы оставить свое мнение, необходимо зарегистрироваться на сайте