Question

Après avoir mis en œuvre mes fonctions de Désinfectez (selon des détails demandés), mon patron a décidé de changer l'entrée acceptée. Maintenant, il veut garder une étiquette spécifique et ses attributs. Je suggère de mettre en œuvre un langage comme BBCode qui est plus sûr IMHO mais il ne veut pas parce qu'il serait beaucoup de travail.

Cette fois-ci, je voudrais garder les choses simples, donc je ne vais pas le tuer la prochaine fois qu'il me demande de changer à nouveau cette chose. Et je sais qu'il le fera.

Suffit-il d'utiliser d'abord le strip_tags avec le paramètre de balise pour préserver et htmlentities ?

Était-ce utile?

La solution

strip_tags ne se traduit pas nécessairement dans le contenu en toute sécurité. strip_tags suivie htmlentities serait en sécurité dans la mesure où rien codé en HTML est sûr, mais il ne fait aucun sens.

Soit l'utilisateur est la saisie du texte brut, auquel cas il devrait être sortie en utilisant htmlspecialchars (de préférence à htmlentities), ou ils sont l'entrée des balises HTML, dans ce cas, vous devez analyser correctement, fixer le balisage cassé et la suppression éléments / attributs qui ne sont pas dans une liste blanche coffre-fort.

Si c'est ce que vous voulez, utilisez une bibliothèque existante pour le faire (par exemple. htmlpurifier ). Parce que ce n'est pas une tâche triviale et si vous vous trompez, vous vous avez donné des failles de sécurité XSS.

Autres conseils

Vous pouvez conserver les balises spécifiques à l'aide strip_tags avec cette syntaxe: strip_tags($text, '<p><a>');

Cet extrait de code viderait tous les tags sauf p et a. Les attributs sont conservés pour les balises que vous avez permis (p et a dans l'exemple ci-dessus).

Cependant, cela ne signifie pas que les attributs sont en sécurité. Veut-il des attributs spécifiques ou veut-il garder toutes les balises autorisées sur? Pour le premier cas, vous devrez analyser chaque balise et supprimer ceux souhaités, désinfectante les valeurs. Pour conserver tous les attributs sur balises autorisées, vous avez encore besoin de les désinfecter. Je vous recommande d'utiliser htmlentities sur les valeurs d'attributs pour les aseptiser (pour l'affichage, je suppose).

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top