Проверка и обработка ввода на 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() для фильтрации целых массивов сразу С уникальными флагами для каждого элемента.
В любом случае, сделайте это, чтобы добавить еще один уровень безопасности и убедиться, что ввод от пользователя, который вы принимаете в своем приложении, не позволит хакеру проникнуть во внутрь.
Комментарии
Для того чтобы оставить свое мнение, необходимо зарегистрироваться на сайте