Authentification des utilisateurs sur le serveur de jeu
Bonjour/bonsoir,

J'aborde ici une problématique "un poil" complexe concernant l'authentification du client de jeu sur le serveur.
Nous parlons ici du client 3.3.5 avec la dernière version dites "stable" de trinity (qui date d'une dizaine de jours).

Ma première demande concerne l'authentification par adresse email : est ce que Trinity à mis en place ce système? Quand j'essaye de me connecter avec une adresse email, le client me fait "une mise à jour" étrange puis me demande de redémarrer le client.. Rien ne se passe en plus.

Ma seconde demande concerne la sécurité des comptes. J'avais observé le problème suivant (à l'époque c'était sur mangos-one pour client BC) : le client envoyait systématiquement le nom de compte et le mot de passe en majuscule (vous voyez la bonne faille de sécurité la dessous)...

Il semble que Trinity ne prenne pas en compte la casse non plus (aussi bien pour les noms de compte que pour les mots de passe), est ce que cela vient d'une restriction au niveau du client (3.3.5 cette fois ci) ou ont t'ils oubliés de dev cette fonction?

Dans l'attente de vos réponse,
Galathil
En ce qui concerne l'adresse mail, le système avait été mis en place à un moment mais je crois qu'il a été revert. Le problème vient du fait qu'en DB les mots de passe sont un hash formé de cette façon :
SHA1(salt+mdp)
le problème, c'est que cette salt était jusqu'à présent constituée du username du joueur. La connexion par mail pose le souci d'obliger les joueurs à re rentrer leur mot de passe pour pouvoir régénérer le hash à partir du mail. Pour cette raison, des tas de petits serveurs basés sur trinity ont eu des soucis du jour au lendemain. Un check vers les anciens commits (avant aout dernier il me semble) devrait te permettre de retrouver le commit qui génère ça.

Pour le problème de login et mot de passe en majuscule uniquement, c'est effectivement le cas. Le client envoie lui même les données en majuscule et on ne peut donc plus revenir en arrière (perte d'informations côté serveur, on reçoit que les majuscules donc impossible de retrouver lesquelles étaient en minuscule).

C'est un souci de sécurité à partir du moment ou on considère le souci de complexité du mot de passe. Si on effectue quelques stats sur les mots de passe côté joueur, on se rend compte qu'ils rentrent totalement dans les travers (débiles, il faut le dire) habituels des utilisateurs, à savoir mettre en mot de passe des suites de chiffre, le pseudo, la date de naissance, voir même le pseudo de leur main -_-. Bref, le souci de complexité du mot de passe n'est donc pas réellement prioritaire, d'autant plus que le hash étant généré à partir d'une salt propre à chaque joueur, le bruteforce reste difficilement réalisable ...

Au passage, ces limitations existent toujours sur MoP Wink A savoir que sous WarLords, ce ne sera plus le cas, le système d'authentification utilisé aujourd'hui n'y existera plus Smile
Ah Nobodie, quel plaisir de te revoir Smile et tu es à la hauteur de ta réputation !

Merci pour toutes ces précisions... Je sais que j'avais halluciné à l'époque de voir que tout était en MAJ.. Venant de Blizzard.. Bref..

Pour l'authentification par email, je pense que l'on peut contourner la "double authentification" en faisant quelque chose dans le genre quand l'utilisateur se connecte :

Code :
SELECT username,sha_pass_hash FROM account WHERE email=''email_venant_du_client" LIMIT 1;

On recompose ensuite le hash coté serveur grâce à l'username en base de données et le mot de passe venant de l'utilisateur Wink

La condition serait bien entendu qu'il n'y ai pas de doublons et que les emails soient en uppercases.

Après tu me dira que tout ceci est exotique, pas faux mais c'est histoire d'étudier et bidouiller un peu avec Trinity et autant commencé par le début Wink

Encore merci Smile
hello Smile
Le problème est qu'on ne reçoit pas les logins/pass en clair depuis le client. on reçoit le couple login/hash. ce hash est généré à partir des deux champs entrés sur la fenêtre de connexion.

à partir de là, il y a deux solutions.
  • Si tu pars sur un serveur vide (aucun compte joueur), tu peux sans souci modifier le système d'authentification pour considérer le hash comme étant constitué du couple mail/pass (et il faut dans ce cas modifier le code correspondant dans l'authserver).
  • Si tu possèdes déjà des comptes joueur, en plus du système précédemment présenté, il faut absolument un système à part (typiquement un site internet) sur lequel tu peux recalculer le nouveau hash mail/pass à la connexion de tes joueurs. Tu es alors obligé d'annoncer à tes joueurs l'obligation de se reconnecter au moins une fois sur le site web avant de pouvoir se connecter ingame. Sans cela, impossible de connaître, depuis le serveur, le mot de passe rentré par le joueur car celui-ci est déjà hashé clientside.

Citation : On recompose ensuite le hash coté serveur grâce à l'username en base de données et le mot de passe venant de l'utilisateur Wink
Justement, ce n'est pas possible car on ne reçoit pas le mot de passe de l'utilisateur, mais directement le hash composé par le couple login/pass entré. Si on obtenait le mot de passe en clair (très risqué car susceptible d'être récupéré par une attaque de type MITM), il est clair que ce serait simple de recalculer tout ça, mais ce n'est pas le cas Smile

Je ne sais pas si je me suis bien fait comprendre, mais pour le coup c'est pas simple à expliquer ^^' J'en ferais un petit sujet explicatif avec quelques diagrammes si nécessaire Wink

sinon, enchanté également de te voir, je t'avouerais ne plus me rappeler où nous nous sommes croisés mais en tout cas si j'ai pu t'aider, j'en suis ravi Wink
Sisi c'est parfaitement clair Smile , j'étais dans l'erreur partant du principe que le mot de passe était envoyé en clair (Que je suis méchant avec Blizzard Troll ). Donc oui tout se tient finalement.

En se qui concerne la modification du serveur (connexion par adresse email) en partant d'une base de données vierge sa me tenterais bien mais mon intuition me fait douter sur un point...

Quand j'ai essayé d'entrer une adresse email dans le champs de connexion, il s'est passé quelque chose de franchement bizarre... Le client m'a dirigé vers la fenêtre de visu des personnages (vierge) avant de m'afficher un message "Mise à jour en cours..." avec une progression qui est vite arrivée à 100%. Après le client me demandait de le redémarrer...
J'ai ensuite vérifié mais il n'avait apparemment rien fait.. Étrange.

J'en suis arrivé à deux conclusions possibles :
  • Soit le client s'est bien connecté au serveur trinity.
  • Soit on a affaire à une limitation cliente qui redirigerais chez Blizzard (genre si l'username est un email)

Dans les deux cas je vérifierais avec Wireshark se soir et je vous tiendrais au courant..

En fait on se connait pas directement. Nous avons faillit travailler dans le même serveur à un moment mais il y a eu certains évènements... Bref ce n'est pas le propos du post Wink

Encore merci pour ton temps et ton précieux savoir Smile
A savoir que le client fait une vérification dégueulasse pour savoir si c'est bien un email qui est renseigné. En effet, il fait le test : "Y a-t-il un caractère @ dans le username". C'est plutôt dégueulasse mais c'est comme ça que fait blizzard.

Mais du coup, pour les serveurs privés, le code a été hexédité et la comparaison devient en fait "S'il n'y a pas de caractère @ dans le champ". Ce qui permet en fait de gérer la connexion via un username et non un mail (qui sert aussi à se démarquer de l'officiel et à ne pas avoir d'erreur de la part des joueurs en cas d'oubli sur le realmlist, offi = mail et privé = username.

Or ce test (le @) est effectué à deux reprises, mais seule une modification permet de changer ça en un username. Mais si on enlève cette modification, on passe dans d'autres boucles et le client considère alors qu'il doit faire une mise à jour (en tout cas ça m'est arrivé quand j'ai dû modifier mon client) donc le problème doit sûrement être le même sur les versions antérieures Wink

Pour le premier cas, il te suffit de regarder les logs du serveur d'authentification et tu sauras si tu t'es co, mais j'en doute complètement Smile

En espérant que ça ai pu aider Smile
(28-03-2014 11:42)NoboDie a écrit :  Or ce test (le @) est effectué à deux reprises, mais seule une modification permet de changer ça en un username. Mais si on enlève cette modification, on passe dans d'autres boucles et le client considère alors qu'il doit faire une mise à jour (en tout cas ça m'est arrivé quand j'ai dû modifier mon client) donc le problème doit sûrement être le même sur les versions antérieures Wink

J'avoue que cette partie est un peu floue mais c'est sans doute parce que je n'ai jamais essayé de décompiler le client.. xD

Donc au final, si je comprends bien, il est tout de même possible de forcer l'utilisation d'un email (en recodant quelques lignes dans Trinity) ou le client n'en fera qu'à sa tête et fera "n'importe quoi" ?
c'est 100% réalisable, puisque ça a d'ailleurs déjà été fait. Par contre, cela nécessite très certainement une petite modification client pour annuler les modifications de trinity servant à passer du mail au username.

Add moi sur Skype si tu le souhaite, je verrais pour te modifier ce qu'il faut côté client.
Ce sujet est-il résolu ?
Merci.
Oui résolu

Retourner en haut WoW-Emu