Como desinfectar os valores da caixa de seleção no post meta?

4

Eu adicionei uma caixa de seleção na postagem meta. Aqui está o código e funciona bem. Minha pergunta é, eu preciso higienizar os valores antes de atualizar o post meta? Se sim, como deve ser feito?

É assim que estou adicionando o meta-campo:

<?php $value = get_post_meta( $post->ID, 'my_options', true ); ?>
<select name="my_options">
    <option value="option1" <?php selected( $value, 'option1'); ?>><?php _e('Option 1', 'textdomain'); ?></option>
    <option value="option2" <?php selected( $value, 'option2'); ?>><?php _e('Option 2', 'textdomain'); ?></option>
</select>

e é assim que estou atualizando o valor:

if ( isset( $_POST['my_options'] )){
    update_post_meta( $post->ID, 'my_options', $_POST['my_options'] );  
}
    
por qasir 20.02.2015 / 10:21

2 respostas

5

Ao aceitar entradas de dados do usuário, acho que a validação de dados deve ser executada, se possível, não apenas sanitização. Por exemplo, você poderia esperar um número, um valor de bool, uma string de texto (mesmo quando a entrada é uma caixa de seleção que pode ter um valor de string), etc. Você pode santificar para esses tipos de dados; então você pode ir além e validar os dados em relação aos valores esperados: integer, float, true / false, emails, URLs e assim por diante.

Vamos com sua caixa de seleção. Ele tem duas opções com os valores "option1" e "option2", então ambos são strings e podem ser sanitizados com sanitize_text_field :

if ( isset( $_POST['my_options'] )){

    $value = sanitize_text_field( $_POST['my_options'] );

    update_post_meta( $post->ID, 'my_options', $value );  

}

Mas um usuário pode alterar o valor do formulário selecionando opções facilmente a partir do frontend, para que ele possa manipular o formulário e enviar valores diferentes para "option1" ou "option2" que você armazenará no banco de dados. Como você sabe exatamente quais são os valores esperados, você pode fazer uma limpeza de dados e validação de dados. Por exemplo:

if ( isset( $_POST['my_options'] )){

   $valid_values = array(
                       'option1',
                       'option2',
   );

    $value = sanitize_text_field( $_POST['my_options'] );

    if( in_array( $value, $valid_values ) ) {

        update_post_meta( $post->ID, 'my_options', $value );

    }

}

Ou você pode definir um retorno de chamada de sanitização personalizada para a opção "my_options" e usar sanitize_meta :

if ( isset( $_POST['my_options'] ) ){

        $value = sanitize_meta( 'my_options', $_POST['my_options'], 'post' )

        update_post_meta( $post->ID, 'my_options', $value );

}

E defina o retorno de chamada de santificação:

add_filter( 'sanitize_post_meta_my_options', 'sanitize_my_options_meta' );

function sanitize_my_options_meta( $value ) {

   $value = sanitize_text_field( $value );

   $valid_values = array(
                       'option1',
                       'option2',
   );

   if( ! in_array( $value, $valid_values ) ) {

        wp_die( 'Invalid value, go back and try again.' );
    }

    return $value;
}
    
por cybmeta 20.02.2015 / 12:37
0

Você pode usar qualquer uma das funções de saneamento incorporadas no Wordpress (como sanitize_text_field ). Alternativamente, se você está preocupado com elementos específicos sendo injetados nas opções selecionadas, você pode escrever sua própria função de saneamento com a função sanitize_meta .

    
por Evan Van Slooten 20.02.2015 / 10:59