[FreeGlobes] Mise en forme du texte
En travaillant sur le nouvel annuaire pour faciliter le guest-blogging, j'ai constaté un gros bug avec l'outil de création d'annuaire FreeGlobes. Ce billet explique ce bug et détail la procédure pour le corriger.
Présentation du bug
Lorsqu'un membre de l'annuaire ajoute un site, il a la possibilité de mettre en forme le texte de sa description grâce à un éditeur WYSIWYG. Cela permet de mettre des éléments en gras, italique, souligné, couleur et bien d'autres choses encore tel que l'ajout de lien supplémentaire dans la description.
Or, il s'avère que lorsque le site est validé, toute la description est ajouté dans la base de donnée sans aucune mise en forme, ce qui reviens à dire que l'éditeur WYSIWYG est totalement inutile et qu'il trompe les membres. Moi-même j'ai effectué des inscriptions dans des annuaires FreeGlobes en pensant pouvoir ajouter un lien profond, mais je n'ai fais que perdre mon temps.
RĂ©parer le bug
L'origine du bug se situe dans le répertoire "members/include/functions" dans le fichier intitulé link.php. Je vous recommande d'ouvrir ce fichier php avec un traitement de texte simple ou avec NotePad++ (qui est un excellent outil). A la ligne 106 il y a le bout de code suivant:
$description = isset($_POST['description']) ? strip_tags($_POST['description']) : "";
Les connaisseurs en PHP comprendront que la fonction strip_tags supprime toutes les balises PHP et HTML de la description rédigé avec l'éditeur WYSIWYG. Pour corriger le problème il y a deux solutions, l'une étant plus sécurisé que l'autre.
Solution 1
La première solution consiste à enlever la fonction strip_tags, mais c'est une porte ouverte aux tentatives de piratage. En effet, si un membre mal intentionné insère un script particulier, cela ne sera pas filtrer et le script comportant le code mal intentionné sera ajouté sur le site. Toutefois voici le code à inséré pour ceux qui désire utiliser cette solution:
$description = isset($_POST['description']) ? $_POST['description'] : "";
Solution 2
Cette deuxième solution, moins risqué, consiste à préciser les balises HTML autorisée. Un paramètre de la fonction strip_tags permet d'indiquer les balises qu'il ne faut pas filtrer. Voici le code que j'ai utilisé qui permet une mise en forme de la description tout en évitant de laisser passer certains balises HTML dangereuse:
$description = isset($_POST['description']) ? strip_tags($_POST['description'], '<p><a><strong><em><ul><ol><li><font><table><hr><br><td><tr><th><u><span><img>') : "";
En copiant/collant ce code suivant, vous réparerez le petit bug. J'invite d'ailleurs tous les administrateurs d'annuaire FreeGlobes à modifier cette partie du code, pour permettre à leurs membres de mettre en forme le texte. Après tout, s'il y a un éditeur WYSIWYG ce n'est pas pour rien.
J'invite donc également tous les webmasters et référenceurs de contacter les annuaires récalcitrant pour les inciter à corriger ce bug. Vous y gagnerez puisqu'une fois corrigé il est possible d'insérer plusieurs liens dans la description.