A saída HTML deve ser passada através de esc_html () AND wp_kses ()?

9

Estou confuso sobre os diferentes usos de esc_html() e wp_kses() . Entendo que esc_html() converte caracteres especiais em sua entidade HTML e que wp_kses() remove tags indesejados (por exemplo, <script> ), mas não tenho certeza em quais contextos eles devem ser usados juntos ou separadamente.

Se eu executar algum HTML não confiável por meio de esc_html() , qualquer JavaScript será exibido em texto sem formatação em vez de ser renderizado pelo navegador, portanto, é seguro nesse ponto, correto? O único motivo para também executá-lo através de wp_kses() seria evitar que o script bruto fosse exibido?

Basicamente, esc_html() torna isso seguro e wp_kses() deixa isso bem bonito. Isso está correto?

    
por Ian Dunn 14.10.2011 / 20:52

2 respostas

14

A regra geral, pelo menos defendida por Mark Jaquith , é sanitize na entrada, escape na saída (o corolário desta regra é higienizar cedo, escapar atrasado ).

Portanto: use filtros de sanitização (como a família kses() ) quando armazenar dados não confiáveis no banco de dados e use filtros de escape (ou seja, a família esc_*() ) quando exibindo não confiáveis dados no modelo .

    
por Chip Bennett 14.10.2011 / 21:33
12

As funções kses devem ser usadas quando você quiser permitir que algum subconjunto de html esteja no resultado. Por exemplo, os comentários permitem alguns HTML neles para negrito, itálico, links e tal.

A função esc_html deve ser usada para escapar completamente do html. Nenhum HTML passará por ele sem ser convertido em algo que será interpretado como não HTML por um navegador.

    
por Otto 14.10.2011 / 21:31