JeuxOnLineForumsPlusConnectés : 621 (sites) | 1033 (forums)Créer un compte
Neverwinter Nights 2
La Tour des Arcanes
Répondre
Partager Rechercher
Avatar de Laban
Laban
Alpha & Oméga
 
Avatar de Laban
 

Sécurisation de Serveur Persistant par mot de passe

Téléchargement : Fichier Zip
Page du projet : Github

Le serveur de clef Bioware ayant rendu l'âme suite à une attaque du groupe LulzSec, la sécurisation des comptes joueurs est devenue hasardeuse.

Les scripts fournis, oeuvre de Crom29 avec la participation de Lv4, devraient répondre à vos besoins les plus courants.

Le projet intègre un module nwn2 et un fichier erf à importer.

Fichier Readme :
Code PHP:

Ce package comprend le script requis pour une sécurisation de votre module
persistant
.

Le systeme fonctionne avec la base de données campagne du serveur.

Vous trouverez dans le répertoire erf les deux fichiers à ajouter à votre module


////////////////////////////////////////////////////////////////////////////////
// e_mod_pconload.nss
////////////////////////////////////////////////////////////////////////////////
 
 
Script correspondant à l'evenement OnPCLoaded du module.
 
 En cas d'
ajout à un script existantajoutez simplement la fonction Secu() et 
 appelez la dans le contexte principal 
(main() ) du script.
 
 
 
////////////////////////////////////////////////////////////////////////////////
// gui_secu_script.nss
////////////////////////////////////////////////////////////////////////////////
 
 
Script correspondant à la saisie du mot de passe par le joueur
En résumé, ce système enregistre un mot de passe supplémentaire pour le joueur en fonction de ses informations personnelles et permet d'éviter une usurpation d'identité trop facile.

Merci pour votre feedback.
Avatar de Eskaman
Eskaman
Alpha & Oméga
 
Avatar de Eskaman
 
Quel est le besoin réel ?

Il y a t'il un vrai risque de se faire piquer sa clef ? J'veux dire, nwn2 est plus vraiment le jeux à la mode, non ?

Ou c'est qu'à cause de ce piratage, on peut plus facilement piquer le compte d'un autre joueur ?

Je comprend pas trop les implications de ce piratage en fait...
Avatar de Lv4
Lv4
Duc / Duchesse
 
Avatar de Lv4
 
Citation :
éviter une usurpation d'identité trop facile.
Comme les serveurs d'auth sont morts, n'importe qui peut se connecter avec n'importe quel compte. Le mot de passe n'est pas vérifié.
Ce n'est pas ta clé qui serait volée, mais ton compte.
Avatar de Laban
Laban
Alpha & Oméga
 
Avatar de Laban
 
En fait à l'heure actuelle, n'importe qui peut usurper le compte de n'importe quel joueur à condition de connaître son identifiant Bioware.

Alice dont l'identifiant Bioware est "Alice" crée un personnage nommé "Adamanta" sur le serveur Synveril .

Bob en utilisant l'identifiant Bioware "Alice" peut en ce moment jouer le personnage Adamanta sur Synveril sans qu'Alice le sache.

Pourquoi ? Car le Master Server des clefs Bioware qui enregistrait les mots de passe est tombé et que par défaut quand ce serveur n'est pas joignable, le jeu fait confiance au joueur.


Depuis assez longtemps, certains serveurs ont mis en place des systèmes pour sécuriser l'accès aux personnages d'un joueur (NWN2 est une vraie passoire niveau sécurité) avec des méthodes plus ou moins fermes. Lyncya, de mémoire, était par exemple extrêmement ferme.

Le système de Crom29 et Lv4 est plutôt souple. Qu'en pensez-vous ?

NB : 1. Administrateurs de PWs, vous ne pourrez pas dire que vous ne saviez pas. 2. Il ne semble pas que Bioware soit très pressé de remettre en place un Master Server. Ça pourrait durer encore longtemps.
Avatar de Okalik
Okalik
Héros
 
Avatar de Okalik
 
Thumbs up
Merci !
j’étais au courant de ce problème mais sans solution j’évitai de trop le répandre pour évité de réel problème sur le serveur.

J’étais partie sur une façon de liée une clée cd a un login.. Ton idée semble plus simple et déjà réalisable en plus.

Je transfert au staff technique du module de-suite.

Merci pour la communauté
__________________

Mon Hymne depuis T4c (caern) : Pouvoir des joueurs
Serveur nwn² où je traine actuellement : http://jolstatic.fr/forums/signaturepics/sigpic1441_1.gif
Pas encore trouvé mieux, ouvert a toute proposition pour des terres nouvelle rp
Avatar de Okalik
Okalik
Héros
 
Avatar de Okalik
 
question j'ai transmis le trés bon boulot au staff du module où je traîne

il se trouve qu'il préfère faire un système avec la BDD sql plutôt que la BDD campagne. selon ses mots : "Mais il faut l'adapter de toute façon au script d'entrée du joueur qui est spécifique à chaque module. De plus je ferai un mot de passe par joueur et non pas par PJ, et surtout pas lié au nom du PJ (c'est l'inconvénient de la base de donnée campagne) car ça met la grosse pagaille dès qu'il y a changement de nom."

En tout cas je doute pas que ce qui est ici est déjà une bonne aide. En tout cas je me demande bien comment réussir ce genre de passe en sql sachant que sur le module en question on peut en effet changer son nom de pj
Avatar de Crom29
Crom29
Grand duc
 
Avatar de Crom29
 
la BDD bioware à l'inconvénient d'être lente (ça reste correct, la colère d'aurile tourne exclusivement en campaign, et il n'y a aucun problèmes), mais elle a l'avantage d'être utilisable par n'importe quel module.
La BDD mysql est beaucoup plus rapide, mais requiers nwnx4 et un server mysql.
A mon avis, il n'y a pas besoin d'adapter le script au mysql : il n'y a que 3 requêtes sur la BDD à l'entrée d'un joueur en temps normal (si il doit entrer son mdp, il y aura un peu plus de requêtes, mais ça reste en dessous de 5-6)

ensuite le système ne fonctionne pas avec le nom du personnage (GetName(oPC)), mais avec le nom du compte bioware (GetPCPlayerName(oPC))
On peut donc changer sans problèmes le nom du personnage, sans avoir de problèmes
__________________
Avatar de Okalik
Okalik
Héros
 
Avatar de Okalik
 
Post
Merci c'est transmis.

Visiblement le mode sécurisé sera là a la prochaine Maj en version mysql
Avatar de Torcafel
Torcafel
Duc / Duchesse
 
Avatar de Torcafel
 
Bonjour,
Pour compléter la réponse d'Okalik, nous sauvegardons déjà sur base de donnée SQL les informations de compte joueur, clé CD et adresse IP. Il est donc très simple de rajouter à ces informations le mot de passe joueur, sans créer par ailleurs une autre structure. Cela permet aussi d'enquêter en cas de fraude éventuelle ...

Je remercie néanmoins les contributeurs qui ont fourni leurs scripts, tout le travail mis a disposition sur le forum est très utile.

Et en plus, ça m'a motivé pour sortir ma modif plus rapidement
Avatar de Crom29
Crom29
Grand duc
 
Avatar de Crom29
 
Ça serais bien si tu pouvais partager les scripts modifiés pour mysql : je suis sûr que d'autres seraient intéressés
__________________
Avatar de Torcafel
Torcafel
Duc / Duchesse
 
Avatar de Torcafel
 
Pourquoi pas, je vais les mettre, mais c'est lié à la structure de la base SQL, donc non réutilisable sans adaptation.
Avatar de Okalik
Okalik
Héros
 
Avatar de Okalik
 
Thumbs up
Voilà pourquoi j'aime ce forum, les gens y ont une vrai mentalité de "communauté"
Avatar de Eskaman
Eskaman
Alpha & Oméga
 
Avatar de Eskaman
 
Merci pour l'explication, effectivement, y'a un bel impact...
Avatar de Torcafel
Torcafel
Duc / Duchesse
 
Avatar de Torcafel
 
Ajout mot de passe avec une base mysql.

Le kit nwnx4 est fourni avec un ensemble de tables permettant de stocker les informations liées aux joueurs et personnages. Je m'intéresse ici à la table "table_player" qui contient les informations joueur. J'ai donc ajouté dans mon exemple un nouveau champ "MotDePasse" de type varchar, longueur 20 caractères (avec le logiciel SQlyog par exemple). Il est créé par défaut avec une valeur vide.

Le code suivant permet de gérer le mot de passe (initialisation / saisie), il est à placer à la fin de la suite de scripts appelés sur l'événement OnPCLoaded du module.
Code:
// Gestion Mote de Passe Joueur
 
 string MdP = DBReadString("Table_Player", "MotDePasse", "PlayerName='" + SQLEncode(GetPCPlayerName(oPC)) + "'");
 if (MdP == "")
 // Initialisation du mot de passe
 {
   DisplayInputBox(oPC,
                0,
                "Veuillez initialiser votre mot de passe Joueur (20 caractères max) : conservez ce mot de passe!",
                "gui_init_mdp",
                "gui_client_enterc",
                TRUE,
                "SCREEN_STRINGINPUT_MESSAGEBOX",
                0,
                "Valider",
                0,
                "Quitter le jeu",
                ""); 
 
 }
 else
 // Vérification du mot de passe
 {
   DisplayInputBox(oPC,
                0,
                "Veuillez saisir votre mot de passe Joueur",
                "gui_verif_mdp",
                "gui_client_enterc",
                TRUE,
                "SCREEN_STRINGINPUT_MESSAGEBOX",
                0,
                "Valider",
                0,
                "Quitter le jeu",
                "");        
 }
Le script "gui_init_mdp" permet d'enregistrer le mot de passe lors de la première utilisation.
Code:
/*********************************************************************************\
//:: Torcafel - 2011 :://
//:: Mot de passe Joueur
//::
\*********************************************************************************/
#include "db_inc_functions"
 
void main(string sVar)
{
 if (sVar == "" || GetStringLength(sVar) == 0 || sVar == " ") BootPC(OBJECT_SELF);
 else
 {
  SendMessageToPC(OBJECT_SELF, "Mot de passe enregistré : " + sVar);
  string sSQL = "SET MotDePasse='" + sVar + "'";
     DBSQLCmd("UPDATE " + gTable_Prefix + "Table_Player " + sSQL + " WHERE PlayerID=" + IntToString(GetPlayerID(OBJECT_SELF)));
 }  
}
Le script "gui_verif_mdp" permet de vérifier le mot de passe.
Code:
/*********************************************************************************\
//:: Torcafel - 2011 :://
//:: Mot de passe Joueur
//::
\*********************************************************************************/
#include "db_inc_database"
void main(string sVar)
{
 string MdP = DBReadString("Table_Player", "MotDePasse", "PlayerName='" + SQLEncode(GetPCPlayerName(OBJECT_SELF)) + "'");
 if (MdP == sVar) SendMessageToPC(OBJECT_SELF, "Mot de passe valide");
 else
 {
  SendMessageToPC(OBJECT_SELF, "Mot de passe invalide");
  BootPC(OBJECT_SELF);
 }
 
}
Le dernier script "gui_client_enterc" déjà présent dans le module permet d'éjecter le joueur en cas de mot de passe invalide.
Code:
void main()
{
 object oPC = OBJECT_SELF;
 BootPC(oPC);
}
Avatar de Okalik
Okalik
Héros
 
Avatar de Okalik
 
Thumbs up
Merci Torca
Répondre

Connectés sur ce fil

 
1 connecté (0 membre et 1 invité) Afficher la liste détaillée des connectés

Rechercher
Rechercher:

Recherche avancée

© JeuxOnLine / JOL. Tous droits réservés. - Conditions générales d'utilisation - Conditions d'utilisation des forums - Politique de confidentialité - Utilisation de mes données personnelles - ! Signaler un contenu illicite