Aller à la recherche

Des noisettes pour Squirrelmail

J'utilise pour gérer mon courrier un client de messagerie web, Squirrelmail. Celui-ci dispose d'un module d'extension, change_sqlpass qui permet de changer en ligne son mot de passe, si celui-ci est enregistré dans une base de données.

Le module annonce fièrement que ça dernière version est compatible avec PostgreSQL, qui est la base de données que j'utilise.

Génial, exactement ce que je cherchais !

Aussitôt dit, aussitôt fait, je vais chercher le module et je l'installe...

Installation... Relance... Essai...

Et là, déception, ça ne marche pas.

Petit tour du code, et là quelques surprises :

  • Les guillemets utilisé dans les requêtes SQL sont des guillemets doubles (ce qui marche avec MySQL, mais pas avec PostgreSQL).
  • Le mot de passe est passé à la moulinette escapeSimple[1] avant d'être chiffré. Avec MySQL, ça marchait bien, car le mot de passe était chiffré dans une requête SQL. Avec PostgreSQL, il faut utiliser une fonction externe de chiffrement avant de mettre le mot de passe en base. Là, c'est la cata., si le mot de passe contient, par exemple, un guillemet simple, celui-ci sera transformé, et le mot de passe enregistré ne sera pas celui que l'utilisateur a entré... Mauvaise surprise garantie à la reconnexion ^^
  • Petite cerise sur le gâteau (ce n'est pas forcément la faute du module), les caractères accentués ne passe pas. Par sécurité, il vaudrait mieux refuser ces mots de passe

Là, un léger doute m'étreint... Ce module a-t-il déjà été testé avec PostgreSQL... Peut-être pas ^^

Qu'à cela ne tienne, vous trouverez en annexe un petit correctif corrigeant ces problèmes (ce correctif, coupé en morceaux, a été dûment remonté au projet, avec un petit rapport d'anomalie en prime 1 2 3 4).

Ce correctif effectue les modifications suivantes :

  • Utilisation de guillemets simples dans le requêtes (attention, mettez à jour votre fichier config.php à partir de config.php.sample, faute de quoi ça ne marchera plus).
  • Utilisation de escapeSimple uniquement lorsque le mot de passe est envoyé tel quel dans une requête.
  • Ajout d'une option pour refuser les mots de passe contenant des caractères accentués (enfin, non ASCII).

Note

[1] Une fonction servant à modifier une chaîne de texte pour éviter qu'elle soit mal interprétée par une base de données

Page top