GTAOnline.net

San Andreas Multiplayer (sa:mp) => Scripting SA-MP [Pawn center] => Discussion démarrée par: Nikko™ le 30 Juin 2008, 21:00:30

Titre: Eviter de "hasher" le password
Posté par: Nikko™ le 30 Juin 2008, 21:00:30
Bonjour,

J'ai la commande /register sur mon serveur mais ca hash automatiquement le mot de passe dans son fichier.

dcmd_register(playerid, params[])
{
    if(PLAYERLIST_authed[playerid]) return SystemMessage(playerid, "Tu est deja loggé");
    if(udb_Exists(PName(playerid))) return SystemMessage(playerid, "Compte déja enregistré. Fait /login password.");
    if(strlen(params) == 0) return SystemMessage(playerid, "Usage correct : /register password");
    if(udb_Create(PName(playerid), params)) return SystemMessage(playerid, "Compte crée ! Tu est automatiquement loggé.");

return true;
}

Comment eviter ca ??

++
nikko
Titre: Re : Eviter de "hasher" le password
Posté par: momo77190 le 30 Juin 2008, 21:59:11
que veut tu dire par "hasher" ?
Titre: Re : Eviter de "hasher" le password
Posté par: Nikko™ le 30 Juin 2008, 22:04:44
"hasher" = un mot de passe en hash = un mot de passe crypter

++
nikko
Titre: Re : Eviter de "hasher" le password
Posté par: Bayshore le 30 Juin 2008, 23:02:50
Salut,

ce que tu veut faire est très déconseillé (bien que cette protection soit un peu useless...), mais si tu y tient vraiment (hackz0r ;D) regardes dans ton include où il y a la fonction, dudb, tu va avoir ça :

Code: (pawn) [Sélectionner]
stock udb_Create(nickname[],pwd[]) {
  if (udb_Exists(nickname)) return false;
  new fname[MAX_STRING];
  format(fname,sizeof(fname),"%s.dudb.sav",udb_encode(nickname));
  dini_Create(fname);
  udb_UserSetInt(nickname,"password_hash",udb_hash(pwd));
  return true;
}

Tu remplaces udb_hash(pwd) par pwd. (http://www.gtaonline.fr/forums/Smileys/ipb/smiley.gif)


++
Alexandre
Titre: Re : Eviter de "hasher" le password
Posté par: kikite02 le 01 Juillet 2008, 18:08:31
j'ai le mm code que nikko pas de password hash dans le code

je voit pas comment il on fait : /
Titre: Re : Eviter de "hasher" le password
Posté par: Lites le 10 Août 2008, 00:35:21
Bonsoir ,
Le même probléme qui peut m'aidez svp
Titre: Re : Eviter de "hasher" le password
Posté par: Bayshore le 10 Août 2008, 16:01:30
Vous savez pas lire ? :ninja
Titre: Re : Eviter de "hasher" le password
Posté par: Lites le 11 Août 2008, 17:36:09
Mais j'ai pas le même code que toi
Titre: Re : Eviter de "hasher" le password
Posté par: Bayshore le 13 Août 2008, 22:15:33
Et bien envoies ton code, je verrais. (http://www.jeuxvideo.com/smileys/11.gif)
Titre: Re : Eviter de "hasher" le password
Posté par: Lites le 14 Août 2008, 00:18:34
dcmd_register(playerid, params[])
{

    if(PLAYERLIST_authed[playerid]) return SystemMessage(playerid, "Déja Register.");
    if(udb_Exists(PlayerName(playerid))) return SystemMessage(playerid, "Ce Compte Existe Déja, Stp Tape '/login '.");
    if(strlen(params) == 0) return SystemMessage(playerid, "Orthographe: '/register '");
    if(udb_Create(PlayerName(playerid), params)) return SystemMessage(playerid, "Compte Bien Creer. Tape '/login'.");
    return true;
}



dcmd_login(playerid, params[])
{


    if(PLAYERLIST_authed[playerid]) return SystemMessage(playerid, "Deja Logge.");
    if(!udb_Exists(PlayerName(playerid))) return SystemMessage(playerid, "Ton Compte Existe Pas, stp creer le '/register'.");
    if(strlen(params) == 0) return SystemMessage(playerid, "Othographe: '/login '");
    if(udb_CheckLogin(PlayerName(playerid), params))
{
    PLAYERLIST_authed[playerid] = true;
    return SystemMessage(playerid, "T'est Bien logger");
    }
    return SystemMessage(playerid, "Mauvais Mot De Passe");
}
Titre: Re : Re : Eviter de "hasher" le password
Posté par: MasterOfQuebec le 15 Août 2008, 04:18:54
Je ne sais pas si j'ai bien compris ce que vous vous voulez mais je crois que c'est ceci:
Hash (simplement utiliser udb_hash):
stock udb_Create(nickname[],pwd[]) {
if (udb_Exists(nickname)) return false;
new fname[MAX_STRING];
format(fname,sizeof(fname),"%s.dudb.sav",udb_encode(nickname));
dini_Create(fname);
udb_UserSetInt(nickname,"password_hash",pwd);
return true;
}

Pas de Hash (mot de passe et nom):
stock udb_Create(nickname[],pwd[]) {
if (udb_Exists(nickname)) return false;
new fname[MAX_STRING];
format(fname,sizeof(fname),"%s.dudb.sav",udb_encode(nickname));
dini_Create(fname);
udb_UserSetInt(nickname,"password_hash",pwd); //Encoder les caractères pour prévenir des éventuelles erreurs avec udb_encode?
return true;
}
Je crois qu'il vous faudra aussi modifier la fonction qui vérifie la correspondance du mot de passe lors de la connexion car la fonction encodera le mot de passe par l'utilisateur pour comparer par la suite les 2 mots de passe encodés.

Notez que je conseil de laisser les mots de passe hasher car ceci complique le travail des utilisateurs voulant savoir les mots de passe des autres utilisateurs.
Pour éviter des éventuelles failles je conseil aussi de vérifier que le mot de passe ne dépasse pas un certain nombre de caractères (par exemple la faille qu'il y a eu dans le mode Pen1).