Bug #1

Impossible de mettre un apostrophe dans les mots de passe

Added by moyo almost 15 years ago. Updated almost 14 years ago.

Status:ClosedStart date:
Priority:LowDue date:
Assignee:baaz% Done:

0%

Category:Common
Target version:0.65

Description

Si on mets le caractère ' dans un mot de passe, il est impossible de se connecter (en revanche, avec un ", ça marche).
Cela fait presque comme si on se trompait de mot de passe, à la différence qu'on a pas de message d'erreur, mais juste un "." suivi de "Relogin"... 

ADDITIONAL INFORMATION:
Je n'ai pas testé encore l'utilisation de l'authentification externe, et je n'ai donc pas pu vérifier que les mots de passes "externes" contenant des apostrophes marchaient bien...
Cependant, je trouve dommage de ne pas accepter les ' dans les mots de passe alors que les " passent très bien... 
------------------------------------
Bon c'est corrigé pour les champs commentaires, pour les autres champs je ne pense pas que nous ayons besoin d'utiliser des ", je regarde ça pour les mots de passes, mais je pense aussi qu'on doit pouvoir fonctionner avec des mots de passes sans ".
Surtout maintenant que les connections aux sources exterieures ne gardent plus les mots de passes.
------------------------------------
En fait, le problème est bien plus général que juste les mots de passe.
Je viens de voir que le problème était le même par exemple dans les champs commentaires des imprimantes, et j'imagione dans tous les champs texte.
Bien sûr, le problème peut être contourné en précédant le caractère de \ , mais ce n'est pas intuitif, et c'est même impensable pour un mot de passe... 

Associated revisions

Revision 12842
Added by remi over 9 years ago

[0.78] fix 1 issue for RuleCachedCollection + 1 TODO

History

#1 Updated by over 14 years ago

Ceci ressemble à un trou de sécurité, par exemple, dans glpi/glpi/users/classes.php il faut remplacer :

function getFromDB($name) {
        $db = new DB;
        $query = "SELECT * FROM glpi_users WHERE (name = '".unhtmlentities($name)."')";
        if ($result = $db->query($query)) {

par

function getFromDB($name) {
        $db = new DB;
        $query = "SELECT * FROM glpi_users WHERE (name = '".mysql_escape_string($name)."')";
        if ($result = $db->query($query)) {

ou plutôt ajouter une méthode ::escape à la classe Db est faire :

function getFromDB($name) {
        $db = new DB;
        $query = "SELECT * FROM glpi_users WHERE (name = '".$db->escape($name)."')";
        if ($result = $db->query($query)) {

on peut dans le cas contraire faire executer nimporte quelle commande SQL

#2 Updated by moyo over 14 years ago

Avez vous testez ce que vous avancez ?
Niveau sécurité il y a d'autres mécanismes au sein de GLPI pour protégérer ce type d'attaque

#3 Updated by moyo almost 15 years ago

  • Status changed from New to Assigned

#4 Updated by moyo over 14 years ago

  • Status changed from Assigned to Closed

Also available in: Atom PDF