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

9

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 que wp_kses() supprime les balises non désirées (par exemple, <script> ), mais je ne sais pas dans quel contexte elles doivent être utilisées ensemble ou séparément.

Si j'exécute du code HTML non fiable via esc_html() , tout code JavaScript sera affiché en texte brut au lieu d'être restitué par le navigateur. Il est donc sécurisé à ce stade, n'est-ce pas? La seule raison de l'exécuter également via wp_kses() serait d'éviter d'afficher le script brut?

En gros, esc_html() le rend sûr et wp_kses() le rend joli. Est-ce correct?

    
posée Ian Dunn 14.10.2011 - 20:52

2 réponses

14

La règle générale, au moins adoptée par Mark Jaquith , désinfecte à l'entrée, échappe à la sortie (le corollaire de cette règle étant désinfecter tôt, échapper tard ).

Donc: utilisez des filtres de désinfection (tels que la famille kses() ) lorsque en stockant des données non fiables dans la base de données , et utilisez des filtres d'échappement (c'est-à-dire la famille esc_*() en tant que produisant des informations non fiables données dans le modèle .

    
réponse donnée Chip Bennett 14.10.2011 - 21:33
12

Les fonctions kses doivent être utilisées lorsque vous souhaitez autoriser certains sous-ensembles de HTML à figurer dans le résultat. Par exemple, les commentaires autorisent une partie du code HTML en gras, italique, liens, etc. HTML.

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

    
réponse donnée Otto 14.10.2011 - 21:31

Lire d'autres questions sur les étiquettes