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
-
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
-
que veut tu dire par "hasher" ?
-
"hasher" = un mot de passe en hash = un mot de passe crypter
++
nikko
-
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 :
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
-
j'ai le mm code que nikko pas de password hash dans le code
je voit pas comment il on fait : /
-
Bonsoir ,
Le même probléme qui peut m'aidez svp
-
Vous savez pas lire ? :ninja
-
Mais j'ai pas le même code que toi
-
Et bien envoies ton code, je verrais. (http://www.jeuxvideo.com/smileys/11.gif)
-
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");
}
-
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).