Blogue

Markdown et XSS

Les attaques XSS (cross-site scripting) sont une technique connue pour obtenir accès à des informations privées sur les utilisateurs d’un site web. L’attaquant injecte du contenu HTML peut recommandable (un script) sur une page web qui lui permettra de lire les cookies d’un et de faire quelque chose de mal avec (tel que voler des mots de passe). Comme contremesure, vous devriez filtrer tout contenu suspicieux provenant de vos utilisateurs. Markdown n’inclus pas de filtre XSS, vous devez donc le fournir vous même. Mais faites attention à la façon dont vous le faite…

La règle de base est ceci : filtrez le contenu pour des attaques XSS après que Markdown ait fait sa conversion, pas avant. Si vous filtrez avant, le filtre brisera quelques éléments de la syntaxe Markdown et laissera des trous dans la sécurité. Aussi, prenez note que même si vous utilisez PHP Markdown dans somme mode sans HTML, où les balises HTML sont enlevées, vous n’êtes pas à l’abris des attaques XSS. Laissez-moi vous montrer pourquoi.

Voici un exemple d’attaque XSS où l’on mélange HTML et Markdown. Il s’agit d’un lien contenant un script (ce script est sans danger, mais celui d’un autre attaquant pourrait être plus malicieux).

> allô à <a name="n"
> href="javascript:alert('xss')">*toi*</a>

Maintenant, supposons qu’on applique le filtre XSS avant Markdown pour filtrer le HTML indésirable. Le filtre XSS, s’attendant à du HTML, verra sûrement la balise <a> comme se terminant au premier caractère de la deuxième ligne et laissera la balise intacte. Le href="javascript:…" sera vu comme du texte tout à fait normal et n’y touchera pas. Mais quand Markdown converti ceci au HTML, voici le résultat :

<blockquote>
 <p>allô à <a name="n"
 href="javascript:alert('xss')"><em>toi</em></a></p>
</blockquote>

Après Markdown, le premier > sur la deuxième ligne disparait parce qu’il est utilisé comme indicateur de bloc de citation dans la syntaxe Markdown, et vous avez maintenant un lien contenant une attaque XSS !

Est-ce que Markdown a généré le HTML ? Non, le HTML était déjà présent et à la vue dans le texte d’entrée. Le filtre XSS n’a pu le voir parce que le texte n’obéissait pas aux régles du HTML : c’était un mélange de Markdown et de HTML et le filtre ne connaît rien de Markdown.

Maintenant, on pourrait penser que désactiver le HTML dans Markdown règle le problème, mais ce n’est pas vraiment le cas. Considérons cet autre vecteur d’attaque utilisant la syntaxe Markdown elle-même pour créer un lien dangereux :

[un peu de texte](javascript:alert('xss'))

Une fois passé par Markdown, vous obtenez ceci :

<a href="javascript:alert('xss')">un peu de texte</a>

L’attaque XSS est encore là ! Markdown n’est pas un filtre XSS, il ne fait que passer l’URL qu’on lui donne dans le lien.

Et encore un fois, si on applique le filtre XSS avant Markdown, il ne filtrera rien puisque qu’il vera tout ça comme du texte. Tout ceci montre que ça prend prend toujours un filtre après Markdown pour vérifier le HTML généré, autrement on risque toujours des injections de javascript.

Donc en conclusion, si vous voulez assurez la sécurité, vous devez filtrer ce qui sort de Markdown, pas ce qui entre. Il n’y a pas d’autre choix.

Notez que si vous utilisez Wordpress, le filtre XSS kses est déjà intégré et il devrait fonctionner correctement avec PHP Markdown.


Voici Magic Launch

Certains se sont plaint quand Snow Leopard a cessé d’honorer les codes de créateur lors de l’ouverture des fichiers, mais ces codes de créateurs étaient alors la seule catégorie en plus du type de fichier qui décidait de quelle application lancer pour un fichier donné. Magic Launch change tout ça aujourd’hui.

Avec Magic Launch vous pouvez personnaliser de plusieurs façons l’ouverture des fichiers : utilisez les codes de créateur pour ouvrir les fichiers PDF, lancez les fichiers HTML dans votre éditeur préféré quand ils se trouvent dans votre dossier de projets web, ou écrivez votre propre règle regardant le contenu du fichier avant de décider quelle application utiliser pour l’ouvrir. Associer des applications est simple, mais très flexible.

Magic Launch ne bidouille pas votre système en aucune manière, il ne fait que changer l’application par défaut pour les types de fichier sélectionnés pour son application agent. L’agent de Magic Launch ne s’ouvre que lors de l’ouverture d’un fichier, et se ferme immédiatement après avoir passé le fichier à la bonne application ; il ne consomme donc aucune ressource sur votre système pendant que vous faites autre chose.

Magic Launch est disponible aujourd’hui pour 14 $US, 15 $CA, ou 11 €.


Service de paiement en ligne

Je suis présentement à la recherche d’un service de paiement par internet prenant les cartes de crédit et qui garde l’argent en monnaie canadienne. Mais je n’arrive pas à en trouver un qui n’a pas de frais de départ et de frais mensuels, et qui ne nécessite pas une entreprise enregistrée légalement. Enfin, à part Paypal ; mais Paypal ne m’apparait pas très sécuritaire comme alternative. Suggestions ?

Mon idée présentement est de passer par une compagnie états-unienne. L’argent serait conservé en dollar US, ce qui signifie que toute transaction qui n’est pas en dollar US serait sujette par deux fois à des frais de conversion de devise, point plutôt ennuyant. Plus tard, si les choses vont suffisamment bien, je mettrai plus d’efforts pour faire quelque chose de mieux.


Youtube, s.v.p pourrait-on se débarrasser de Flash?

Années après années, Adobe ne semble pas capable de faire marcher Flash correctement sur Mac (est-ce que ça marche ailleurs, je sais pas). Aujourd’hui, j’ai chargé un vidéo Youtube, et après qu’il ait fini de jouer, malgré le fait qu’il n’y se passait plus rien à l’écran le plugin Flash prenait quand même 11% du temps sur mon Core 2 Duo.

Page d’exemple avec vidéo

J’ai pris l’habitude de désactiver les plugins dans Safari quand je navigue. Ceci fait que la majorité du temps je ne me dérange pas de les réactiver et ne fait que sauter par dessus les vidéos Flash. Je réactive Flash seulement quand je crois avoir trouvé quelque chose qui en valait vraiment la peine.

Maintenant, Safari support l’élément <video> du HTML, et je crois qu’il serait temps que Youtube commence à l’utiliser, retombant au Flash seulement quand c’est nécessaire. Je ne peut que me demander combien de temps supplémentaire ceci sauverait à tous les utilisateurs d’ordinateur portable et combien d’énergie serait sauvé en globalement.



  • © 2003–2024 Michel Fortin.