¿Se debe pasar la salida HTML a través de esc_html () Y wp_kses ()?

11

Estoy confundido acerca de los diferentes usos de esc_html()y wp_kses(). Entiendo que esc_html()convierte caracteres especiales en su entidad HTML, y que wp_kses()elimina las etiquetas no deseadas (por ejemplo, <script>), pero no estoy seguro de en qué contextos deben usarse juntos o por separado.

Si ejecuto un código HTML que no sea de confianza esc_html(), entonces cualquier JavaScript se mostrará en texto plano en lugar de ser procesado por el navegador, por lo que es seguro en ese punto, ¿correcto? ¿La única razón para ejecutarlo también wp_kses()sería evitar que se muestre el script sin formato?

Básicamente, lo esc_html()hace seguro y lo wp_kses()hace bonito. ¿Es eso correcto?

Ian Dunn
fuente

Respuestas:

16

La regla general, al menos según lo establecido por Mark Jaquith , es desinfectar en la entrada, escapar en la salida (el corolario de esta regla es desinfectar temprano, escapar tarde ).

Por lo tanto: use filtros de desinfección (como la kses()familia) al almacenar datos no confiables en la base de datos , y use filtros de escape (es decir, la esc_*()familia) al generar datos no confiables en la plantilla .

Chip Bennett
fuente
14

Las funciones kses deben usarse cuando desea permitir que algún subconjunto de html esté en el resultado. Por ejemplo, los comentarios permiten algunos HTML en negrita, cursiva, enlaces y demás.

La función esc_html se debe usar para escapar completamente de html. Ningún HTML lo atravesará sin convertirse en algo que un navegador interpretará como no HTML.

Otón
fuente