A saída HTML deve ser passada por esc_html () AND wp_kses ()?

11

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()remova tags indesejadas (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 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 executá-lo wp_kses()seria evitar exibir o script bruto?

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

Ian Dunn
fonte

Respostas:

16

A regra geral, pelo menos adotada por Mark Jaquith , é higienizar a entrada, escapar à saída (o corolário dessa regra é higienizar cedo, escapar tarde ).

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

Chip Bennett
fonte
14

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

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

Otto
fonte