Tengo este mensaje de advertencia en Netbeans 7.4 para PHP, mientras que yo estoy usando $_POST, $_GET, $_SERVER, ….

No tienen Acceso a Superglobal $_POST Matriz Directamente

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

Edición: El Caso de la muestra código muestra esta advertencia.

  • ¿Qué es el código que asegura este mensaje en Netbeans?
  • Es sólo una recomendación, usted puede desactivar en las opciones… y yo diría que esto no es una programación de pregunta!
  • Sólo quiero saber lo que esta advertencia me quiero cambiar! porque los antiguos netbeans versión no está mostrando. Hay otra manera de obtener estos parámetros a partir de? (Me refiero $_POST)
  • Sé que es sólo la recomendación y sé dónde desactivar, pero lo que yo puedo hacer para corregir sin ningún tipo de advertencia? Creo que mi conocimiento se limita a obtener advertencia, pero sólo quiero fija para hacer mi código, hasta la fecha con algo nuevo, porque sé que sólo $_POST va a obtener esos publicación se presenta el formulario. De todos modos, Gracias por tu comentario 😀
  • posibles duplicados de el problema de Seguridad al acceder a php superglobal directamente
InformationsquelleAutor Kannika | 2013-11-04

4 Comentarios

  1. 91

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

    filter_input_array(INPUT_POST) en lugar de $_POST

    • Está usted respondiendo a la pregunta «¿qué significa la advertencia» o en la pregunta «cómo quitar»? Porque estoy de acuerdo con usted, eso es lo que la advertencia significa, pero el uso de la función de la advertencia permanece allí. La tengo ahora mismo en un $name = filter_input(INPUT_POST, $_POST["name"]);.
    • usted está usando $_POST nuevo, mientras que usted debe hacer algo como esto $nombre = filter_input(INPUT_POST, «nombre»);
    • y ¿cuál es la sustitución de $_REQUEST ?
    • INPUT_REQUEST, en este ejemplo filter_input(INPUT_REQUEST, ‘request_name’)
    • que no existe… ese es el problema
    • Así, la advertencia puede desaparecer, pero si no especifica un filtro, a continuación, usted realmente no solucionar el problema de seguridad NetBeans está señalando. Por ejemplo, si usted está esperando un int, uso: filter_input(INPUT_POST, 'var_name', FILTER_SANITIZE_NUMBER_INT)
    • ¿cómo puedo acceder a $_GET
    • -1: Esta respuesta parece una especie de trivial. ninguna explicación, lo que filter_input hace, ni siquiera un enlace a php.net/filter_input. Me asusta que la gente se acaba de ver, usar, creo que están a escribir mejor código, pero aún no entiendo una cosa.
    • Ow, lo que sugiere el uso de una función de filtro sin filtro argumento conduce a FILTER_UNSAFE_RAW, que es equivalente a TRUST_ALL_BAD_INPUT
    • puede usted explicar por qué debemos hacer esto?
    • Si no me equivoco, INPUT_REQUEST parece ser que no se ha implementado todavía: php.net/manual/en/filter.constants.php.
    • Debe especificar un filtro, de lo contrario esto no hace otra cosa que deshacerse de la advertencia. El Manual dice: «Si se omite, FILTER_DEFAULT va a ser usado, el cual es equivalente a FILTER_UNSAFE_RAW. Esto resultará en que no existe un filtro por defecto.»

  2. 85

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

    Encontré en la misma oscuridad que tú. Acabo de encontrar este artículo, que explica algunos de los nuevos consejos introducido en NetBeans 7.4, como este:

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

    La razón por la que se ha añadido es porque las superglobales generalmente se rellenan con la entrada del usuario, lo cual no debe ser nunca confió. En su lugar, algún tipo de filtrado se debe hacer, y eso es lo que la sugerencia se sugiere. Filtro de la superglobal valor en caso de que haya algún envenenado contenido.

    Por ejemplo, donde tuve:

    $_SERVER['SERVER_NAME']

    He puesto en su lugar:

    filter_input(INPUT_SERVER, 'SERVER_NAME', FILTER_SANITIZE_STRING)

    Usted tiene el filter_input y los filtros doc aquí:

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

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

    • Si haces exactamente lo que usted dice, Netbeans todavía subrayado el «$_POST» o «$_GET» partes y mostrar la notificación como si no fuera a ser filtrada. Este problema puede ser simplemente una Netbeans error (en la versión 8.1, al menos).
  3. 6

    Estoy de acuerdo con el otro ms responden que en la mayoría de los casos (casi siempre) es necesario desinfectar Su entrada.

    Pero considerar dicho código (es para un DESCANSO de la controladora):

    $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 para aplicar desinfectante aquí (aunque no romper nada, tampoco).

    Así que, de seguir las recomendaciones, pero no a ciegas – más bien entender por qué son para 🙂

  4. 1

    Solo uso

    filter_input(INPUT_METHOD_NAME, ‘var_nombre’) en lugar de $_INPUT_METHOD_NAME[‘var_nombre’]
    filter_input_array(INPUT_METHOD_NAME) en lugar de $_INPUT_METHOD_NAME

    e.g

        $host= filter_input(INPUT_SERVER, 'HTTP_HOST');
        echo $host;

    lugar de

        $host= $_SERVER['HTTP_HOST'];
        echo $host;

    Y uso

        var_dump(filter_input_array(INPUT_SERVER));

    lugar de

        var_dump($_SERVER);

    N. B: se Aplican a todos los otros Super variable Global

Dejar respuesta

Please enter your comment!
Please enter your name here