Advertencia "Do not Access Superglobal $_POST Array Directly" en Netbeans 7.4 para PHP

Recibo este mensaje de advertencia en Netbeans 7.4 para PHP cuando utilizo $_POST, $_GET, $_SERVER, ....

No acceda directamente a la matriz superglobal $_POST

¿Qué significa esto? ¿Qué puedo hacer para corregir esta advertencia?

Editar: El código de ejemplo del evento sigue mostrando esta advertencia.

Solución

filter_input(INPUT_POST, 'var_name') en lugar de $_POST['var_name']
filter_input_array(INPUT_POST) en lugar de $_POST.

Comentarios (12)

Aunque un poco tarde, me he encontrado con esta pregunta mientras buscaba la solución para el mismo problema, así que espero que pueda ser de alguna ayuda...

Me encuentro en la misma oscuridad que tú. Acabo de encontrar este artículo, que explica algunas sugerencias nuevas introducidas en NetBeans 7.4, incluida ésta:

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

La razón por la que se ha añadido es porque los superglobales suelen estar llenos de datos introducidos por el usuario, en los que nunca se debería confiar ciegamente. En su lugar, debería realizarse algún tipo de filtrado, y eso es lo que sugiere la sugerencia. Filtrar el valor superglobal en caso de que tenga algún contenido envenenado.

Por ejemplo, donde tenía:

$_SERVER['SERVER_NAME']

He puesto en su lugar:

filter_input(INPUT_SERVER, 'SERVER_NAME', FILTER_SANITIZE_STRING)

Tienes el doc de filter_input y filters aquí:

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

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

Comentarios (1)

Estoy de acuerdo con las otras respuestas que en la mayoría de los casos (casi siempre) es necesario sanear Su entrada.

Pero considere este código (es para un controlador 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();
}

No sería muy útil aplicar sanitizing aquí (aunque tampoco rompería nada).

Así que, sigue las recomendaciones, pero no ciegamente - más bien entiende para qué son :)

Comentarios (0)