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?
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.
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.