@Alk90
php, mysql, jquery, css, html, api

Зачем использовать filter_input если можно тот же результат получить меньшим кодом?

Подскажите, для чего использовать вот такую строку?
$id = filter_input(INPUT_GET, 'id', FILTER_SANITIZE_NUMBER_INT);


Ведь проще сделать так, а результат тот же:
$id = intval($_GET['id'] ?? 0)

или так:
$id = isset($_GET['id']) ?  intval($_GET['id']) : null
  • Вопрос задан
  • 153 просмотра
Решения вопроса 2
SagePtr
@SagePtr
Еда - это святое
К примеру, в параметры $_GET или $_POST легко может попасть массив, если злоумышленник передаст его в виде url?id[]=1
Большинство начинающих разработчиков о такой возможности PHP даже и не в курсе и ожидают там гарантированно увидеть строку (если параметр определён).
В ситуации с intval это к ошибке не приведёт, intval приведёт неподходящие типы к 0 или 1, но в прочих ситуациях может сыграть плохую роль.
Ответ написан
ipatiev
@ipatiev Куратор тега PHP
Потомок старинного рода Ипатьевых-Колотитьевых
Мне не нравится ни тот ни другой вариант.

Сами по себе функции фильтрации - довольно странная часть языка. И нынешний отказ от FILTER_SANITIZE_STRING как раз подтверждает этот тезис. Задумка была в теории неплохая, но реализация получилась так себе. А, главное - все эти функции только насильно меняют значение переменной. Молча.
А в нормальном современном приложении принято проверять переменную на соответствие правилам и выдавать ошибку

В случае, если вместо числового id нам приходит вдруг массив, надо не молча его глотать и химичить с превращением в число, а сразу отвечать в репу 400-й ошибкой, не разводя сантименты.

Поэтому я бы взял какую-нибудь либу для валидации, вот первая же из гугля, https://github.com/rakit/validation
И нормально проверял входящие параметры.
В случае, если это пользовательский ввод, типа логина и пароля, то отдавать культурные ошибки
Если же это чисто внутренняя инфраструктура приложения, типа id из нашей же ссылки, то при наличии ошибок молча отдавал 400.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы