- IBurningTV
- Messages : 1
Date d'inscription : 08/05/2020
Age : 24
Localisation : Entre deux lignes de code
[Tuto] Authentification liée a son site (hors auth Mineweb)
Ven 8 Mai - 16:59
-{ Authentification liée à son site (hors auth Mineweb) : }-
Ce tutoriel a pour but de vous montrer comment lier la base de données de votre site à votre launcher
1) Création du Script PHP :
On va crée un fichier que l'on va appeler Auth.php et on l'ouvre avec notre Éditeur de texte
Voici le Script :
- Code:
<?php
if (isset($_GET['pseudo']) && isset($_GET['mdp']))
{
$bd_nom_serveur = 'localhost';
$bd_login = 'LOGIN'; //Le login de la BDD
$bd_mot_de_passe = 'PASSWORD'; //Le mot de passe de la BDD
$bd_nom_bd = 'NAME'; //Le Nom de la BDD
$link = mysqli_connect($bd_nom_serveur, $bd_login, $bd_mot_de_passe, $bd_nom_bd);
mysqli_select_db($link, $bd_nom_bd); //Ne pas toucher
mysqli_query($link, 'set names \'utf8\'');//Ne pas toucher
$pseudo = $_GET['pseudo']; //Ne pas toucher
$mdp = $_GET['mdp']; //Ne pas toucher
$sql = 'SELECT PASSWORD_COLUMN FROM TABLE WHERE PSEUDO=\'' . $pseudo . '\''; //SELECT motdepasse FROM table WHERE pseudo
$sql = mysqli_query($link, $sql); //Ne pas toucher
$result = mysqli_fetch_array($sql); //Ne pas toucher
if ($result['PASSWORD_COLUMN'] != '') //Indiquer la colonne du MDP
{
$mdp = hash('sha256', $mdp);// Indiquer la Fonction de cryptage utiliser - MD5 / SHA256 / SHA512
if ($result['PASSWORD_COLUMN'] == $mdp)//Indiquer la colonne du MDP
{
echo "Response : YES";
}
else
{
echo "Response : NO";
}
}
else
{
echo "Response : NOREGISTER";
}
}
else
{
echo "Response : Impossible de se connecter";
}
?>
je vous ai mis des commentaires pour vous aider mais voici quelque explication:
- Code:
$bd_login = 'LOGIN'; //Le login de la BDD
$bd_mot_de_passe = 'PASSWORD'; //Le mot de passe de la BDD
$bd_nom_bd = 'NAME'; //Le Nom de la BDD
- Code:
$sql = 'SELECT PASSWORD_COLUMN FROM TABLE WHERE PSEUDO=\'' . $pseudo . '\'';
A cette ligne a la place de PASSWORD_COLUMN il faut indique la colonne qui contient le mot de passe des utilisateur
A la place de TABLE il faudra indiquer dans quelle table se situent les informations que l'on cherche
et enfin a la place de PSEUDO il faudra indiquer la colonne qui contient le pseudo des utilisateur
- Si vous vous demandez à quoi correspond une colonne ou encore une table je vous invite à regarder ces Image :
> Trouver sa table : ICI
> colonne: ICI
Donc maintenant vous savez ce qu'est votre table et votre colonne, Si je suis mes Images cela donnerait :
- Code:
$sql = 'SELECT password FROM users WHERE pseudo=\'' . $pseudo . '\'';
Ensuite vous devrez ré-indiquer votre Colonne mot de Passe à plusieurs endroit :
- Code:
if ($result['ICI'] != '')
........
if ($result['ICI'] == $mdp)
Le Script est Maintenant terminer, Vous n'avez plus qu'a le mettre sur le FTP ou vous avez votre site.
imaginons j'ai crée un Dossier auth et que j'ai mis mon fichier auth.php dedans.
Si je vais donc sur MONSITE.fr/auth/auth.php le script affichera : Response : Impossible de se connecter
pour tester le Script il suffit d'ajouter a la fin de l'url
- Code:
?pseudo=UnPseudoDansVotreBDD&mdp=leMDPduCompte
avec l'exemple ci dessus cela donnerait
- Code:
MONSITE.fr/auth/auth.php?pseudo=UnPseudoDansVotreBDD&mdp=leMDPduCompte
vous obtiendrez : Response : YES si les identifiant sont correct
Response : NO si les identifiant sont incorrect
Response : NOREGISTER si les identifiant sont tout simplement inconnu de la BDD
Et nous en avons Fini avec la Partie PHP.
2) Ajout au launcher
Dans votre classe LauncherPanel tout en haut déclarer la variable qui permettra de stocker la réponse du script :
- Code:
private String result;
ensuite direction votre Bouton de Connexion, pour changer sons action.
supprimer :
- Code:
this.loginButton.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent event) {
usernameSaver.writeUsername(usernameField.getText());
/**
* ===================== AUTHENTIFICATION OFFLINE (CRACK) =====================
*/
if (usernameField.getText().length() < 3) {
new LauncherAlert("Authentification echouee",
"Il y a un probleme lors de la tentative de connexion: Le pseudonyme doit comprendre au moins 3 caracteres.");
} else if (usernameField.getText().length() > 3 && passwordField.getText().isEmpty()) {
GameAuth auth = new GameAuth(usernameField.getText(), passwordField.getText(),
AccountType.OFFLINE);
if (auth.isLogged()) {
update(auth);
}
}
/** ===================== AUTHENTIFICATION OFFICIELLE ===================== */
else if (usernameField.getText().length() > 3 && !passwordField.getText().isEmpty()) {
GameAuth auth = new GameAuth(usernameField.getText(), passwordField.getText(),
AccountType.MOJANG);
if (auth.isLogged()) {
update(auth);
} else {
new LauncherAlert("Authentification echouee!",
"Impossible de se connecter, l'authentification semble etre une authentification 'en-ligne'"
+ " \nIl y a un probleme lors de la tentative de connexion. \n\n-Verifiez que le pseudonyme comprenne au minimum 3 caracteres. (compte non migrer)"
+ "\n-Faites bien attention aux majuscules et minuscules. \nAssurez-vous d'utiliser un compte Mojang.");
}
} else {
new LauncherAlert("Authentification echouee!",
"Impossible de se connecter, l'authentification semble etre une authentification 'hors-ligne'"
+ " \nIl y a un probleme lors de la tentative de connexion. \n\n-Verifiez que le pseudonyme comprenne au minimum 3 caracteres.");
}
}
});
et ajouté :
- Code:
this.loginButton.setAction(ce -> {
usernameSaver.writeUsername(this.usernameField.getText());
if(!this.passwordField.getText().isEmpty() && !this.usernameField.getText().isEmpty()){
//Authentification
try {
//URL of Php Script for Authentification
URL url = new URL("URL_DE_VOTRE_SCRIPT_PHP?pseudo="
+ this.usernameField.getText()
+ "&mdp="
+ this.passwordField.getText());
URLConnection urlConnection = url.openConnection();
urlConnection.addRequestProperty("User-Agent", "Mozilla/5.0 (Windows NT 10.0; WOW64; rv:58.0) Gecko/20100101 Firefox/58.0");
InputStream inputStream = urlConnection.getInputStream();
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
for (String line; (line = bufferedReader.readLine()) != null; ) result = line;
System.out.println(result); //test la variable result
if (result.equalsIgnoreCase("Response : NO")) { //Incorect Login
new LauncherAlert("Echec lors de l'authentification", "Le pseudo / mot de passe utilisé est incorrect");
} else if (result.equalsIgnoreCase("Respone : NOREGISTER")) { //Unregistered Login
new LauncherAlert("Compte inexistant", "Veuillez vous enregistrer sur le site Officiel : " + "VOTRESITE.fr");
} else if (result.equalsIgnoreCase("Response : YES")) {//Good Login
GameAuth gameAuth = new GameAuth(this.usernameField.getText(), this.passwordField.getText(), AccountType.OFFLINE);
update(gameAuth);
}
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}else if(this.passwordField.getText().isEmpty() || this.usernameField.getText().isEmpty()){
new LauncherAlert("Erreur de saisie", "Vous n'avez pas rempli les deux champs requis (Nom d'utilisateur / mot de passe)");
}
});
- Code:
URL url = new URL("URL_DE_VOTRE_SCRIPT_PHP?pseudo="
Mettre l'url du script php si je reprend mon exemple sa serait :
- Code:
URL url = new URL("MONSITE.fr/auth/auth.php?pseudo="
et modifier l'alerte si un joueur n'est pas inscrit sur votre site :
- Code:
new LauncherAlert("Compte inexistant", "Veuillez vous enregistrer sur le site Officiel : " + "VOTRESITE.fr");
Voila votre Launcher est relier a la base de donné de votre site,
les utilisateur devront obligatoirement s'inscrire sur votre site pour utiliser votre Launcher.
Fire_Blaim aime ce message
- Lockface77
- Messages : 4
Date d'inscription : 20/01/2021
Re: [Tuto] Authentification liée a son site (hors auth Mineweb)
Jeu 21 Jan - 16:53
Bonjour,
Ce code comprend des énormes failles SQL:
Il ne faut JAMAIS conquaténer un input utilisateur dans une requète sql, il suffit qu'un utilisateur envois une requette avec un psuedo du style: \'; DROP ALL TABLES; -- et tout la dabase tombe il me semble.
Ce code comprend des énormes failles SQL:
- Code:
$sql = 'SELECT PASSWORD_COLUMN FROM TABLE WHERE PSEUDO=\'' . $pseudo . '\'';
Il ne faut JAMAIS conquaténer un input utilisateur dans une requète sql, il suffit qu'un utilisateur envois une requette avec un psuedo du style: \'; DROP ALL TABLES; -- et tout la dabase tombe il me semble.
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum
|
|