mardi 25 septembre 2007

Echappement de code html dans les expressions

En general, on utilise la balise <% $expression %> pour afficher une valeur provenant d'une entrée utilisateur, ou bien d'une base de donnée. Si la valeur de $expression contient du code html, cela peut casser votre mise en page ou pire introduire une faille de sécurité XSS. Pour éviter cela, on peut utiliser le module perl HTML::Entities (fonction encode) pour toute les expressions affichées dans la page. Mason offre un mécanisme plus simple pour éviter cette situation. Si vous réglez la variable suivante dans votre config d'apache:

  1. PerlAddVar MasonDefaultEscapeFlags h
Mason protégera tout les caractères nécessaires dans vos expressions en les remplaçant par des entités html. Je vous conseille aussi de regler ce flag d'echappement (h) pour qu'il provoque seulement l'echappement des caracteres purement html. De cette facon, votre code fonctionnera avec tout les character set:
  1. PerlSetVar MasonEscapeFlags "h => \&HTML::Mason::Escapes::basic_html_escape"
Plus d'infos ici (en anglais) Je reviendrais sur les problèmes d'encoding dans un prochain post.

Aucun commentaire: