web-dev-qa-db-fra.com

Avertissement "Ne pas accéder au tableau $ _POST Superglobal directement" sur Netbeans 7.4 pour PHP

J'ai ce message d'avertissement sur Netbeans 7.4 pour PHP pendant que j'utilise $ _ POST, $ _GET, $ _VERVEUR, ....

N'accédez pas directement au tableau Superglobal $ _POST

Qu'est-ce que ça veut dire? Que puis-je faire pour corriger cet avertissement?

Edit: L'exemple de code Event affiche toujours cet avertissement.

115
Kannika

filter_input(INPUT_POST, 'var_name') au lieu de $_POST['var_name']
filter_input_array(INPUT_POST) au lieu de $_POST

91
Homerocker

Bien que je sois un peu en retard, je suis tombé sur cette question alors que je cherchais une solution au même problème. J'espère donc que cela pourra vous aider ...

Me suis retrouvé dans les mêmes ténèbres que toi. Vient de trouver cet article, qui explique quelques nouvelles astuces introduites dans NetBeans 7.4, dont celle-ci:

https://blogs.Oracle.com/netbeansphp/entry/improve_your_code_with_new

La raison pour laquelle il a été ajouté est que les superglobales sont généralement remplies avec des entrées d’utilisateur, qui ne devraient jamais faire l’objet d’une confiance aveugle. Au lieu de cela, une sorte de filtrage devrait être fait, et c'est ce que suggère le conseil. Filtrez la valeur superglobale au cas où elle aurait un contenu empoisonné.

Par exemple, où j'ai eu:

$_SERVER['SERVER_NAME']

J'ai mis à la place:

filter_input(INPUT_SERVER, 'SERVER_NAME', FILTER_SANITIZE_STRING)

Vous avez la doc filter_input et les filtres ici:

http://www.php.net/manual/en/function.filter-input.php

http://www.php.net/manual/en/filter.filters.php

Je suis d'accord avec les autres intervenants sur le fait que dans la plupart des cas (presque toujours), il est nécessaire d'assainir votre contribution.

Mais considérons un tel code (il s’agit d’un contrôleur REST):

$method = $_SERVER['REQUEST_METHOD'];

switch ($method) {
            case 'GET':
                return $this->doGet($request, $object);
            case 'POST':
                return $this->doPost($request, $object);
            case 'PUT':
                return $this->doPut($request, $object);
            case 'DELETE':
                return $this->doDelete($request, $object);
            default:
                return $this->onBadRequest();
}

Il ne serait pas très utile d’appliquer ici l’assainissement (bien que cela ne casse rien non plus).

Alors, suivez les recommandations, mais pas aveuglément - comprenez plutôt pourquoi elles sont pour :)

6
Rauni Lillemets

Juste utiliser

filter_input (INPUT_METHOD_NAME, 'nom_var' au lieu de $ _INPUT_METHOD_NAME ['nom_var' '] filter_input_array (INPUT_METHOD_NAME) au lieu de $ _INPUT_METHOD_NAME

par exemple

    $Host= filter_input(INPUT_SERVER, 'HTTP_Host');
    echo $Host;

au lieu de

    $Host= $_SERVER['HTTP_Host'];
    echo $Host;

Et utilise

    var_dump(filter_input_array(INPUT_SERVER));

au lieu de

    var_dump($_SERVER);

N.B: Appliquer à toutes les autres variables Super Global

1
Sani Kamal