¿Cómo evitar el escape al guardar código HTML en un valor de opción?

13 ene 2011, 21:05:11
Vistas: 21K
Votos: 10

Tengo una página de Opciones del Tema donde el usuario puede agregar ciertas opciones como enlaces de Facebook, etc. Una de las opciones es para código de publicidad y cuando se guarda como opción, se escapa una y otra vez.

¿Cuál es el mejor enfoque para guardar código insertado en una página de administración <textarea> usando update_option( 'sidebar_code', $_POST['sidebar_code'] ); ?

0
Todas las respuestas a la pregunta 3
0
12

Tomé otro enfoque para esto. Codifiqué y decodifiqué mis opciones con entidades HTML. Una cosa de la que no estoy seguro es si esto abre una fea puerta trasera para que la gente introduzca HTML comprometedor. Estoy confiando en el hecho de que solo los administradores editarán las opciones del tema de todos modos, pero tal vez estoy siendo ingenuo.

Así es como se ve cuando guardo una opción:

update_option('my_option', htmlentities(stripslashes($_REQUEST['my_option'])));

Y así es como se ve cuando recupero una opción:

html_entity_decode(get_option('my_option',htmlentities($my_default_value)));
3 feb 2011 17:12:47
3
stripslashes(wp_filter_post_kses(addslashes($_POST['sidebar_code'])));

pero debes saber que el filtro kses no es 100% seguro.

13 ene 2011 21:46:03
Comentarios

¿Qué quieres decir con no 100% seguro?

Amit Amit
14 ene 2011 00:09:12

Quiero decir que alguien aún podría hacer XSS en tu sitio si es realmente bueno en ello. Si no me equivoco, el último parche de WP solucionó una vulnerabilidad XSS en las funciones kses

onetrickpony onetrickpony
14 ene 2011 02:29:02

kses elimina todas las clases adicionales y atributos HTML (ej. class="classname" width="100") ¿hay alguna forma de evitarlo?

Talon Talon
18 oct 2012 01:07:09
1

Esto no es una respuesta completa a tu pregunta, pero posiblemente te oriente en la dirección correcta: Podrías probar <?php esc_textarea( $text ) ?>, como detalla el codex aquí: http://codex.wordpress.org/Function_Reference/esc_textarea.

Mis propios fragmentos de código para textareas en metaboxes se ven así:

<?php 
  if ( $meta_box['type'] == "textarea" ) {
    $meta_box_value = esc_textarea( get_post_meta($post->ID, $meta_box['name'].'_value', true) );
    echo '<textarea class="meta-textarea" style="width: 100%;" cols="20" rows="2" name="' . $meta_box['name'] . '_value">' . $meta_box_value . '</textarea><br />';
  }
?>
19 jul 2011 10:45:37
Comentarios

Depende de lo que estés haciendo. esc_textarea convertirá cualquier HTML en códigos de entidades HTML, por lo que no puedes usarlo con un área de texto enriquecido como tinyMCE.

Jake Jake
16 jul 2012 18:00:54