web-dev-qa-db-fra.com

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

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 approuvé via esc_html(), alors tout JavaScript sera affiché en texte brut plutôt que 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?

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

11
Ian Dunn

La règle générale, au moins telle qu'énoncée par Mark Jaquith , est assainir en entrée, s'échapper en sortie (le corollaire de cette règle étant assainir tôt, s'échapper tard ).

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

16
Chip Bennett

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 HTML dans les gras, l'italique, les liens, etc.

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.

13
Otto