¿Cuál es la mejor manera de desinfectar los datos POST?

2 minutos de lectura

Estoy trabajando en un complemento de WordPress y necesito desinfectar los datos POST dentro de esta función. ¿Sería sanitize_text_field() la mejor manera de hacerlo? Además, ¿cuál es la forma correcta de agregarlo al código a continuación?

header( 'Content-Type: application/json' );

        global $wpdb;
$session_id = $_POST['session_id'];
        $procedure_name =  $wpdb->prefix . 'get_geojson_route';
        $gps_locations = $wpdb->get_results($wpdb->prepare(
            "CALL {$procedure_name}(%s);", 
            array(
                $session_id
            )
        )); 

  • Lamentablemente, la mejor manera sería no usar WordPress en absoluto. La otra buena manera sería comenzar definiendo qué desinfectar significa para ti. Este fragmento que publicaste es todo lo que es malo con WordPress y las prácticas que fomenta… estás aceptando un nombre de función de la entrada del usuario. Eso me permite meter cualquier tipo de basura. Ni siquiera importa si rompo algo, puedo hacer que su sitio se equivoque y obtener información que se supone que no debo ver. Y está la cuestión de si llamar al procedimiento es la herramienta adecuada para el trabajo.

    – NB

    5 abr 2018 a las 20:46

Para sanear los datos de la publicación, wordpress da la función:

$título = sanitize_text_field ($_POST[‘title’] );

Prueba esto

  • Esta es la solución con la que terminé yendo.

    – Stpete Design

    15 de abril de 2018 a las 0:08

  • que hay de usar sanitize_post()? desarrollador.wordpress.org/reference/functions/sanitize_post

    – gillespieza

    21 de febrero de 2020 a las 11:36

  • @gillespieza, sanitize_post() desinfecta los campos para un objeto WP_Post.

    – Mariana

    19 de febrero de 2021 a las 12:58

  • @stpetedesign, ¡no olvides votar mi respuesta si te ayudó! Gracias.

    – Rakhi Prajapati

    12 de mayo de 2021 a las 11:22

En PHP puedes hacer como:

// it prevents from XSS
$_GET   = filter_input_array(INPUT_GET, FILTER_SANITIZE_STRING);
$_POST  = filter_input_array(INPUT_POST, FILTER_SANITIZE_STRING);

Esto desinfectará su $_GET y $_POST arreglos

Más detalles: PHP -Desinfectar valores de una matriz

Si lo quieres en WordPress mira este enlace:

https://code.tutsplus.com/articles/data-sanitization-and-validation-with-wordpress–wp-25536

Usar $wpdb->prepare está desinfectando por usted

  • Pero deberías tenerlo en una matriz. Debería ser simplemente $wpdb->prepare( “CALL {$procedure_name}(%s);”, $session_id );

    – Chris Flanagan

    5 abr 2018 a las 21:36

  • los preparar () método también acepta arreglos.

    – cabrerahector

    5 abr 2018 a las 21:54

Si su versión de PHP es anterior a 8.1, puede usar

$form_data = filter_input_array( INPUT_POST, FILTER_SANITIZE_STRING );

De lo contrario, puedes usar

$form_data = filter_input_array( INPUT_POST, FILTER_SANITIZE_FULL_SPECIAL_CHARS );

¿Ha sido útil esta solución?