Assainissement markdown *avant* l’interprétation

a marqué ce sujet comme résolu.

Bonjour,

Une petit question sur l’utilisation de python-markdown avec du contenu non fiable. La méthode qui semble préconisée est d’utiliser bleach. D’une part ce dernier est déprécié (mais ça à la limite, il semble qu’il y a des des alternatives et que update liés à la sécurité sont maintenus pour le moment).

Mais surtout il est plutôt fait pour assainir a posteriori, en laissant passer uniquement les tags non-dangereux générés par markdown. Si j’essaie d’assainir avant l’interprétation par python markdown, les « & » sont remplacés par des « & », pareil pour les « > », etc. Et l’interprétation ne se fait pas.

Mais sans assainissement a priori, l’utilisateur peut utiliser directement toutes les balises html qui sont sur la liste blanche sans passer par la syntaxe markdown. Ce que je ne veux pas non plus.

Là je ne vois que deux solutions : modifier toutes les regex de python markdown pour fonctionner avec du code assaini. Ou tout assainir, et dés-assainir au cas par cas pour les chaînes de caractères susceptibles d’être interprétées par markdown. Les deux solutions me paraissent bourrines et cradingues.

Est-ce qu’il existe des méthodes plus propres ? J’imagine que je ne suis pas le premier à avoir le problème. D’ailleurs sur <a href="https://zestedesavoir.com/">zds</a>, il semble que vous l’ayez résolu. Quelle est la bonne façon de faire ?

+0 -0

Hello,

Si tu regardes le code source de zmarkdown tu verras qu’il utilise un parseur externe avec des plugins, notamment remark-escape-escaped qui échappe quelques caractères HTML de base avant de parser le contenu MarkDown.

Ainsi tu t’assures de ne pas avoir de HTML (les balises étant échappées) en entrée du parseur MarkDown, qui peut alors s’occuper de générer du HTML considéré "safe".

C’est le contraire. Je veux échapper le html, mais pas le markdown.

Par exemple :

Si j’utilise une citation

> Je veux utiliser cette
> syntaxe

<blockquote>
Mais je ne veux surtout pas que ce block soit interprété comme une citation
</blockquote>

Si j’assainis après la compilation du md, je suis bien obligé d’autoriser la balise <blockquote>. Si j’assainis avant, je me retrouve avec &gt; à la place des > du premier block, ce qui empêche l’interprétation du markdown par le parseur.

Pour le moment j’ai résolut le problème en forkant Python-markdown et en replaçant > par &gt; dans la regex du parseur. Ça fonctionne, mais je ne trouve pas ça très propre.

Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte