Проверка PHP переменных HTTP-запроса - передовой опыт - PullRequest
0 голосов
/ 05 мая 2020

ОСНОВНОЙ ВОПРОС

Почему плохая идея использовать $ _ REQUEST , $ _ POST или $ _ GET напрямую?


Описание проблемы

Основываясь на других плагинах и объяснениях на сайте php, я использовал глобальную переменную $ _ REQUEST для обработки запроса от внешнего интерфейса:

    // Create Menu Settings
    if ( isset( $_REQUEST['create_menu'] ) ) {
        // Check, if valid
        if ( $this->is_request_valid($_REQUEST, 'Menu and Catergories not refreshed.') ) {
        }
    }

Но следующая подсказка IDE Neatbeans говорит, что я должен учитывать filter_input () или как _ * ( ) функция:

enter image description here


Прежде всего, я попытался напрямую заменить глобальную переменную $ _ REQUEST с $ _ POST или $ _ GET , как показано в примере с наибольшим количеством голосов на сайте, например:

if(isset($_GET["a"])) echo "a is set\n";

Но в этом случае я также см. подсказку Netbeans.


Поэтому я искал фильтр данных do c about php и также нашел описание W3Schools . В примере W3Schools также напрямую проверяется с помощью "isset ()":

if (isset($_GET["email"])) {
    if (!filter_input(INPUT_GET, "email", FILTER_VALIDATE_EMAIL) === false) {
        echo("Email is valid");
    } else {
        echo("Email is not valid");
    }
}

Думаю, лучшим примером является this .


Вопросы

Итак, но могу ли я найти так много других примеров без фильтрации?

Почему использовать $ _ REQUEST , * - плохая идея 1068 * $ _ POST или $ _ GET напрямую?

Если я использую проверку, предложенную в последнем примере, следует ли мне дополнительно проверить новую переменную, например:

$a = filter_input(INPUT_GET, 'a'); 
if(isset($a))
{
    // Do something
}

Извините за длинный пост и спасибо за поддержку.

РЕДАКТИРОВАТЬ

Не видел этот связанный пост раньше в списке выбора:

Do-not-access-superglobal-request-array-direct-netbeans-8-0- php

(Dev) Среда:

PHP Версия 7.4.4

IDE: Apache IDE NetBeans 11.3

ОС: Windows

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...