Question

Lorsque vous développez une application Web et que vous souhaitez autoriser le texte richement formaté de l'utilisateur, vous devez choisir comment autoriser cette entrée. De nombreux langages de balisage ont été créés, car il est plus difficile de nettoyer le code HTML.

Quels sont les avantages et les inconvénients des différents langages de balisage tels que:

Ou, pour le dire différemment, quels facteurs prenez-vous en compte lorsque vous choisissez d'utiliser un langage de marquage particulier.

Était-ce utile?

La solution

Markdown, BBCode, Textile, MediaWiki sont tous à la base le même concept général. Je voudrais donc simplement regrouper ces éléments en deux catégories: HTML et marquage en texte brut.

HTML

Le problème avec HTML est que le contenu est déjà dans un & "présentable &"; formulaire pour le contenu Web. C'est génial, cela permet d'économiser du temps de traitement et c'est un langage facilement analysable. Il existe des dizaines de bibliothèques dans presque toutes les langues pour gérer le contenu HTML, convertir en / de HTML vers d'autres formats, etc. L'inconvénient principal est qu'en raison des normes peu strictes des premiers jours sur le Web, le HTML peut être incroyablement variable et Ne dépendez pas toujours d’une entrée saine lors de l’acceptation de HTML par les utilisateurs. Comme indiqué, ranger ou santizing le code HTML est souvent très difficile, notamment parce qu'il ne respecte pas les règles de balisage normales, contrairement à XML (les balises mal fermées sont courantes).

Balisage en texte brut

Cette catégorie est fréquemment utilisée pour les raisons suivantes:

  • Facilité d'analyse dans plusieurs formulaires à partir d'une source - PDF, HTML, RTF
  • Le contenu est stocké en texte brut lisible (généralement beaucoup plus facile à lire que le HTML brut) si nécessaire ultérieurement, plutôt que de devoir extraire du code HTML
  • Suit des règles définies spécifiques où HTML peut être une variable gênante et non structurée
  • Vous permet de forcer un sous-ensemble de mise en forme du contenu qui est plus approprié dans de nombreux cas que simplement autoriser le HTML intégral
  • En plus de forcer un sous-ensemble de HTML, il est facile de nettoyer les entrées et d’empêcher les problèmes de script entre sites, etc.
  • Conserver le " raw " les données dans un format abstrait signifie qu'à une date ultérieure, si vous souhaitez par exemple convertir votre site de HTML 4 à XHTML, il vous suffit de modifier le code d'analyse. Avec les entrées utilisateur au format HTML, vous êtes maintenant obligé de convertir chaque HTML au format XHTML individuellement, ce qui, comme le montre HTML Tidy, n’est pas toujours une tâche simple. De même, si un nouveau langage de balises arrive à un moment donné ou si vous devez passer à un autre format (RTF, PDF, TeX), un sous-ensemble restreint d’abstractions d’options de formatage du texte simplifie grandement cette tâche.

La ligne du bas est la raison pour laquelle l’entrée utilisateur est utilisée. Si vous prévoyez de conserver les données et que vous devez peut-être mélanger les formats, etc., il est donc logique d'utiliser un format abstrait soigné pour stocker les informations. Si vous devez utiliser les données brutes manuellement pour quelque raison que ce soit, ajoutez des points supplémentaires si ce format est facilement lisible par l'homme. Si vous n’affichez que le contenu d’une page Web (ou d’un document HTML pour un rapport, etc.) et que vous ne vous inquiétez pas de sa conversion ou de sa pérennité, il est raisonnable de le stocker au format HTML.

Autres conseils

Jeff a discuté du pour et du contre sur codinghorror.com alors qu'ils étaient présents. les premières étapes de la mise en place de SO. Je pensais que cela valait la peine d'être lu.

@netrox la base de données n'est pas le problème, la sortie du navigateur est.

La seule préoccupation concerne le rendu final qui peut être interrompu par le code HTML inséré par l'utilisateur. Par exemple, l'utilisateur peut ouvrir une balise <li> mais ne jamais la fermer, ce qui, en fonction de la structure de la page, peut potentiellement endommager la mise en page complète suivante. Ou un autre exemple, ouvrez une balise <strong> sans la fermer, en mettant tout le contenu restant en gras.

Donc, non seulement les tags autorisés doivent être validés, mais comment autorisez-vous exactement certains tags mais pas les autres? Parce qu'il est très facile d'empêcher l'analyse de toutes les balises HTML en utilisant htmlspecialchars() PHP méthode, par exemple, mais quand il s’agit d’autoriser certaines des balises, vous devrez chercher d’autres moyens. Il y a la strip_tags() fonction PHP qui supprime (supprime complètement) les balises non autorisées, mais cela signifie modifier le contenu de l'utilisateur de manière inappropriée, en empêchant l'utilisateur de poster du code simple (code à partager / afficher, pas à traiter).

En plus de casser la présentation, vous devez tenir compte des attaques XSS, telles que l’insertion de javascript dans l’attribut href d’un lien, ce qui pourrait par exemple rediriger les utilisateurs vers un autre site. Consultez cette longue liste d'attaques XSS possibles: https://www.owasp.org/index.php/ XSS_Filter_Evasion_Cheat_Sheet

Comme vous pouvez le constater, il est très facile d'empêcher l'interprétation de toutes les balises HTML, mais il est beaucoup plus compliqué d'empêcher que certaines de ces balises. Pour comprendre cela, vous pouvez jeter un coup d'œil à l'énorme & Quot; purificateur HTML . " Un cadre dont le seul but est d’autoriser certaines balises HTML et de s’assurer que le code HTML généré est valide (c’est-à-dire qu’elle ne cassera pas la page) et exempt d’attaques XSS.

& "; Plusieurs langages de balisage différents ont été créés, car il est plus difficile de nettoyer le code HTML. &";

vraiment? Comment est-ce difficile? Il existe des fonctions permettant de supprimer les attributs ou les balises potentiellement dangereux et de valider le code HTML avant de le saisir dans une base de données ou un fichier. Pouvez-vous me donner des exemples de la difficulté d'assainir le code HTML?

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