La sortie HTML doit-elle être transmise via esc_html () ET wp_kses ()?

11

Je suis confus quant aux différentes utilisations de esc_html()et wp_kses(). Je comprends que esc_html()convertit les caractères spéciaux en leur entité HTML, et cela wp_kses()supprime les balises indésirables (par exemple, <script>), mais je ne sais pas dans quels contextes ils doivent être utilisés ensemble ou séparément.

Si j'exécute du HTML non fiable esc_html(), alors tout JavaScript sera affiché en texte brut plutôt que rendu par le navigateur, il est donc sûr à ce stade, n'est-ce pas? La seule raison de l'exécuter également wp_kses()serait d'éviter d'afficher le script brut?

Fondamentalement, le esc_html()rend sûr et le wp_kses()rend joli. Est-ce exact?

Ian Dunn
la source

Réponses:

16

La règle générale, au moins telle qu'adoptée par Mark Jaquith , est la désinfection en entrée, la fuite en sortie (le corollaire de cette règle étant la désinfection précoce, la fuite tardive ).

Donc: utilisez des filtres de nettoyage (tels que la kses()famille) lors du stockage de données non fiables dans la base de données et utilisez des filtres d'échappement (c'est-à-dire la esc_*()famille) lors de la sortie de données non fiables dans le modèle .

Chip Bennett
la source
14

Les fonctions kses doivent être utilisées lorsque vous souhaitez autoriser un sous-ensemble de code HTML dans le résultat. Par exemple, les commentaires autorisent du code HTML en gras, en italique, des liens, etc.

La fonction esc_html doit être utilisée pour échapper complètement html. Aucun code HTML ne le traversera sans être converti en quelque chose qui sera interprété comme non HTML par un navigateur.

Otto
la source