Использование isset и filter_input правильным способом в PHP

Я разрабатываю базовый API для некоторых простых функций. Я собираю данные, как показано ниже:

if ($action == 'delete' && isset($_POST['targetId']) && isset($_POST['userId'])) {
//The isset causes "Do not access Superglobal _POST array directly" warning in Netbeans
        $userId = filter_input(INPUT_POST, 'userId');
        $beamId = filter_input(INPUT_POST, 'targetId');
}

Должен ли я использовать filter_input даже для проверки, установлено ли значение? Подобно:

if ($action == 'delete' && filter_input(INPUT_POST, 'targetId') && filter_input(INPUT_POST, 'userId')) {

}

Я не смотрю на варианты здесь, я был бы счастлив с наиболее правильным решением, которое является безопасным и устойчивым к взлому.

РЕДАКТИРОВАТЬ: Да, вышеуказанная информация будет использоваться в качестве входных данных для SQL

3 ответа

Решение

filter_input используется для очистки или проверки типа данных ввода. Он используется для того, чтобы убедиться, что ожидаемые вами данные имеют требуемый формат, и вы можете очистить их, используя необходимые фильтры. isset в вашем случае проверит, установлена ​​ли необходимая переменная или нет (или не NULL). Так что у обоих разные варианты использования. Я не вижу использования isset непосредственно на элементе POST как плохой, но я бы рекомендовал использовать filter_input так что данные также могут быть проверены.

Другим решением может быть использование filter_has_var().

if (filter_has_var(INPUT_POST, "userId") {
    //occurs when $_POST['userId'] is set or not null
}

Больше информации в: Официальная документация

Основная проблема с нефильтрованным вводом - это, по сути, внедрение кода. Это проблема, когда вы используете входные данные как часть оператора SQL или ваши выходные данные пользователю (JavaScript).

Таким образом, нет необходимости делать это просто, чтобы проверить, было ли введено значение. Это хорошо, чтобы быть последовательным и использовать filter_input сначала заполняйте переменные, а затем используйте эти переменные, чтобы проверить, были ли заполнены поля, если вы будете использовать значение, как указано выше в вашем скрипте.

Другие вопросы по тегам