security – Qué usar en lugar de wp_kses () en la salida del usuario

Pregunta:

Necesito algo de ayuda aquí.

Al desarrollar un tema, quiero asegurarme de que no haya problemas de seguridad. Por lo tanto, todos los datos dinámicos deben escaparse correctamente para el contexto en el que se representan.

Sé cómo escapar de lo siguiente:

  • Si 'echo' en el atributo, use esc_attr
  • Si 'echo' en el atributo de clase, use sanitize_html_class
  • Si 'echo' en texto sin formato, use esc_html
  • Si 'echo' en la traducción, use esc_html__ , esc_html_e , esc_attr_e , etc.

Pero hay dos áreas en las que no estoy seguro de qué hacer.

  1. ¿Qué escape debo usar si la salida del usuario puede contener algunas etiquetas html, como 'em' o 'fuerte'?

Ejemplo:

<?php $subtitle = get_post_meta($post_id,'subtitle', true); ?>
<h3 class="subtitle"><?php echo $subtitle; ?></h3>

Tenga en cuenta que "wp_kses es una función costosa, por lo que solo debe ejecutarse cuando se guardan los datos, no se muestran" Prueba aquí

  1. ¿Qué escape debo usar para generar estilos CSS?

Ejemplo:

<style type="text/css"><?php echo $css; ?></style>

Respuesta:

Vayamos a ver qué haría el núcleo.

En default-filters.php esto es lo que atraviesa la salida de contenido:

add_filter( 'the_content', 'wptexturize'        );
add_filter( 'the_content', 'convert_smilies'    );
add_filter( 'the_content', 'convert_chars'      );
add_filter( 'the_content', 'wpautop'            );
add_filter( 'the_content', 'shortcode_unautop'  );
add_filter( 'the_content', 'prepend_attachment' );

En realidad, ninguna de estas son funciones de seguridad / escape dedicadas.

Es similar para los comentarios, que provienen por completo de visitantes aleatorios y ni siquiera de autores de sitios de confianza parcial:

add_filter( 'comment_text', 'wptexturize'            );
add_filter( 'comment_text', 'convert_chars'          );
add_filter( 'comment_text', 'make_clickable',      9 );
add_filter( 'comment_text', 'force_balance_tags', 25 );
add_filter( 'comment_text', 'convert_smilies',    20 );
add_filter( 'comment_text', 'wpautop',            30 );

En pocas palabras, es razonablemente confiable, ya que se eliminó en los envíos y regresó de la base de datos.

Leave a Comment

Your email address will not be published. Required fields are marked *

Scroll to Top

web tasarım