J'ai une zone de texte de publication personnalisée que je souhaite assainir wp_kses
avant de mettre à jour ma méta de publication.
Je cherchais des exemples de $allowed
paramètres communs , mais je n'ai vu que cet exemple:
$allowed = array(
'a' => array( // on allow a tags
'href' => array() // and those anchors can only have href attribute
)
);
Qu'est-ce qu'un wp_kses
$allowed
cadre typique ? Quelqu'un peut-il fournir un exemple de ce pour quoi il filtre normalement?
Réponses:
Je ne serais pas d'accord avec la solution proposée par @JaredCobb, qui
wp_kses()
est beaucoup plus flexible que la méthode qu'il a présentée. Il peut supprimer les attributs indésirables des balises sans détruire les balises elles-mêmes. Par exemple, si l'utilisateur insère<strong class='foo'>
,wp_kses()
retournera<strong>
si vous n'autorisez pas la classe, tandisstrip_tags()
que supprimera<strong>
complètement.@redconservatory: Les attributs que vous voudrez utiliser sont les suivants:
Cela permettra le gras et l'italique sans attribut, ainsi que les balises d'ancrage avec un
href
attribut ... et rien d'autre. Il utilise le principe de la liste blanche, que @jaredcobb a noté à juste titre comme la meilleure façon d'aller ici.la source
wp_kses
permet plus de contrôle que les options PHP natives. Je pense que je l'ai dit. J'ai également utilisé le mot «attributs». Je disais que cela dépend de votre cas d'utilisation. Quelqu'un qui essaie de protéger leurs données de toutes les balises serait mieux d'utiliser strip_tags à mon humble avis, mais c'est plus ma préférence qu'autre chose. À votre santé.Je commencerais avec le même
$allowedtags
tableau que WordPress utilise pour leurs commentaires. Vous pouvez trouver leur tableau dans le[wordpress directory]/wp-includes/kses.php
fichier. Celles-ci me semblent des valeurs par défaut raisonnables et un bon point de départ. Voici leur tableau ...Je n'utiliserais PAS PHP
strip_tags
en remplacement dewp_kses
.Vous ne devez jamais utiliser strip_tags pour filtrer le contenu d'un utilisateur inconnu!
J'ai créé une vidéo rapide expliquant pourquoi wp_kses () de WordPress est meilleur que strip_tags () de PHP pour la sécurité .
la source
Je n'ai utilisé que
wp_kses
lorsque j'avais spécifiquement besoin d'autoriser / filtrer les attributs des balises HTML (par exemple, je veux qu'ils soient autorisés à avoir une<image>
balise, avec unsrc=""
attribut, mais je ne veux pas qu'ils puissent, maishref=""
oustyle=""
ou quoi que ce soit d'autre sur la balise image. Dans ce cas,wp_kses
est pratique parce que (comme vous pouvez le voir dans l'exemple que vous avez créé), vous pouvez filtrer très spécifiquement. Je l'ai rarement utiliséwp_kses
car je trouve que quelques PHP natifs Les fonctions (ci-dessous) font l'affaire et sont plus faciles à comprendre lorsque je regarde le code plusieurs mois plus tard.Si vous souhaitez supprimer complètement les balises HTML (sauf peut-être en autoriser quelques-unes), j'utilise toujours
strip_tags
. Vous pouvez passer une chaîne de balises autorisées (comme<p> <br> <strong>
) ou toute autre balise inoffensive que vous aimez. Cela permet à l'utilisateur d'avoir un certain contrôle sur la mise en forme, si cela s'applique à votre cas d'utilisation. J'aimestrip_tags
parce qu'il faut une approche de liste blanche pour nettoyer vos données. (Cela signifie que tout est supprimé, sauf ce que vous avez explicitement ajouté à la liste blanche).Si votre objectif est de leur permettre de mettre du code HTML dans le contenu, mais que vous souhaitez simplement afficher leur texte tel qu'ils l'ont saisi (comme des exemples de code), puis utilisez
htmlspecialchars
. Cela convertira les caractères HTML en leurs homologues codés afin que vous puissiez les afficher en toute sécurité sur la page.Vous pourriez rencontrer du code
str_replace
qui "recherche" de mauvaises balises comme ou ou autre. Je ne recommande vraiment pas cette approche, car il faut une approche de liste noire pour nettoyer les données et vous devez constamment vous assurer que votre liste noire est à jour.Je suppose que pour résumer, cela dépend de l'utilisation de vos métaboxes. Si vous vous protégez contre les commentaires d'utilisateurs (qui pourraient être malveillants), je recommanderais
strip_tags
et autoriserais simplement certaines des balises inoffensives. Si vous avez un bon business case pour microgestion vraiment les balises et les attributs spécifiques du contenu de l'utilisateur,use wp_kses
.la source
wp_kses()
tout ce quistrip_tags()
fait et plus encore? Je suis tout pour garder les choses simples, mais je pense aussi qu'il y a un argument pour ne "surprendre" personne.wp_kses()
est "la manière Wordpress", et puisque nous écrivons du code Wordpress, il y a un argument que c'est probablement le meilleur choix. De plus, si à un moment donné dans le futur, nous voulons ajouter à la liste blanche certaines combinaisons de balises / attributs, l'utilisationwp_kses()
depuis le début ne nécessite pas de refactorisation.Voilà. Cela fonctionne à la fois dans WordPress et en dehors de WordPress.
la source
Vous pouvez également utiliser la fonction wp_kses_post qui est utilisée sur le contenu des publications et ne requiert que des données comme paramètre.
Plus d'informations ici: http://codex.wordpress.org/Function_Reference/wp_kses_post
la source
@Svetoslav Marinov
J'ai ajouté ce code juste après $ buffer = trim ($ buffer);
pour essayer de nettoyer le html et éviter que les caractères cachés collés ne cassent le code, mais cela ne fonctionne pas, il nettoie le html, mais les caractères cachés restent.
la source