06.11.2015, 23:21
(
Последний раз редактировалось Herka; 07.11.2015 в 11:06.
)
Salut tout le monde ! Je refais le tutoriel puisqu'il y avait une faille XSS exploitable et qu'il y a des dйbutants en PHP ici.
Tout d'abord on va commencer par le code [COLOR="RoyalBlue"]HTML[/COLOR], en [COLOR="RoyalBlue"]HTML[/COLOR] pour une connexion on a besoin d'un formulaire.
[COLOR="RoyalBlue"]Un formulaire en HTML se commence avec la balise <form>, oщ l'ont met ensuite les instructions nйcessaires.
Commenзons par crйer cette balise, et ensuite l'instruire (donc lui ajouter des inscructions).
Voilа notre code HTML crйй, maintenant on n'a plus qu'а faire le code[/COLOR] [COLOR="Orange"]PHP[/COLOR].
[COLOR="Orange"]Sur mon serveur, je crypt les mots de passe en UDB_HASH, ce qui est simple et rapide (pas le plus sйcurisй, mais c'est dйjа зa). Ce qui est bien avec le UDB_HASH, du cфtй serveur (de jeu) il est facile а introduire et il est seulement en chiffre, contrairement а d'autre hasher tel que MD5. Cфtй PHP, il y a une fonction pour crypter des mots en UDB_HASH.
Nous allons donc commencer par ouvrir la balise PHP et ajouter la fonction UDB_HASH.
(On commence йgalement les sessions pour la suite)
Maintenant que l'udb est installй nous pouvons commencer а mettre des "si", par exemple :
"Si "utilisateur" et "passe" ont йtй appelйs, on lance le script, voici cette instruction en code :
If = si,
Isset = existe,
$_POST['utilisateur'] = notre input "utilisateur".
Ensuite, on demande а PHP de vйrifier si le fichier "utilisateur".ini existe bien.
Maintenant, on demande а PHP de charger le fichier de l'utilisateur.
Maintenant qu'il est chargй, on peux vйrifier le mot de passe.
Et voilа, votre page de connexion est faites, maintenant on va afficher quelques instructions.
Les "echo" avec "$inifile" doivent avoir des instructions que vous avez dans votre fichier .INI.
[/COLOR]
Code complet :
Bonus : [URL="http://uptobox.com/mlfqlv1fkk0y"]Cliquez ici pour tйlйcharger le panel de Original World RфlePlay.[/URL] (Complet, v0.1)
Voilа, n'hйsitez pas а faire des remarques si j'ai oubliй quelque chose :)
Tout d'abord on va commencer par le code [COLOR="RoyalBlue"]HTML[/COLOR], en [COLOR="RoyalBlue"]HTML[/COLOR] pour une connexion on a besoin d'un formulaire.
[COLOR="RoyalBlue"]Un formulaire en HTML se commence avec la balise <form>, oщ l'ont met ensuite les instructions nйcessaires.
Commenзons par crйer cette balise, et ensuite l'instruire (donc lui ajouter des inscructions).
Code:
<form // Ici, on ouvre la balise de formulaire HTML.
action="" // Ici, on dit que le formulaire sera redirigй vers la page "", ici il n'y a rien puisqu'on va mettre notre code PHP
method="POST" // Ici, on indique que le formulaire sera basй sur du POST, et non sur du GET (Le post est une faзon de passer des informations invisible d'une page а l'autre, sans information telles que echo, le get est une faзon de faire passer des informations par URL d'une page а l'autre)
> // On ferme la balise
<input type="text" name="utilisateur" placeholder="Nom d'utilisateur"/>
<input type="password" name="passe" placeholder="Mot de passe"/>
</form>
Voilа notre code HTML crйй, maintenant on n'a plus qu'а faire le code[/COLOR] [COLOR="Orange"]PHP[/COLOR].
[COLOR="Orange"]Sur mon serveur, je crypt les mots de passe en UDB_HASH, ce qui est simple et rapide (pas le plus sйcurisй, mais c'est dйjа зa). Ce qui est bien avec le UDB_HASH, du cфtй serveur (de jeu) il est facile а introduire et il est seulement en chiffre, contrairement а d'autre hasher tel que MD5. Cфtй PHP, il y a une fonction pour crypter des mots en UDB_HASH.
Nous allons donc commencer par ouvrir la balise PHP et ajouter la fonction UDB_HASH.
(On commence йgalement les sessions pour la suite)
Code:
<?php
session_start();
function udb_hash($buf) {
$length=strlen($buf);
$s1 = 1;
$s2 = 0;
for($n=0; $n<$length; $n++)
{
$s1 = ($s1 + ord($buf[$n])) % 65521;
$s2 = ($s2 + $s1) % 65521;
}
return ($s2 << 16) + $s1;
} // La fonction udb_hash, exemple d'utilisation : echo udb_hash("mdp");
Maintenant que l'udb est installй nous pouvons commencer а mettre des "si", par exemple :
"Si "utilisateur" et "passe" ont йtй appelйs, on lance le script, voici cette instruction en code :
Code:
if(isset($_POST['utilisateur']) && isset($_POST['passe'])) {
If = si,
Isset = existe,
$_POST['utilisateur'] = notre input "utilisateur".
Ensuite, on demande а PHP de vйrifier si le fichier "utilisateur".ini existe bien.
Code:
if(!file_exists("linux/scriptfiles/Joueurs/".$_POST['utilisateur'].".ini")) { // Demande si le fichier existe ou pas
echo "Votre compte n'existe pas."; // Dit а l'utilisateur qu'il n'a pas de compte
} else { // Sinon,
Maintenant, on demande а PHP de charger le fichier de l'utilisateur.
Code:
$inifile = parse_ini_file("linux/scriptfiles/Joueurs/".$_POST['utilisateur'].".ini");
Maintenant qu'il est chargй, on peux vйrifier le mot de passe.
Code:
if(udb_hash(htmlentities($_POST['passe'])) == $inifile['Password']) { // On demande si le mot de passe cryptй est celui qu'il y a dans le fichier ini. (htmlentities est la protection contre les failles XSS)
$_SESSION['compte'] = $_POST['utilisateur']; // On crйй la session "compte" et on lui indique que pour cet utilisateur, le nom de la session sera le nom de l'utilisateur
header('Location: index.php'); // On le redirige vers une page, ici index.php
} else { echo "Rй-essayez."; } // On lui indique que le mot de passe n'est pas bon
} // On ferme le else { de tout а l'heure.
Et voilа, votre page de connexion est faites, maintenant on va afficher quelques instructions.
Code:
echo $_SESSION['compte']; // Affiche le nom de l'utilisateur
echo $inifile['Level']; // Affiche le niveau de l'utilisateur
Les "echo" avec "$inifile" doivent avoir des instructions que vous avez dans votre fichier .INI.
[/COLOR]
Code complet :
Code:
<form action="" method="POST">
<input type="text" name="utilisateur" placeholder="Nom d'utilisateur"/>
<input type="password" name="passe" placeholder="Mot de passe"/>
</form>
if(isset($_POST['utilisateur']) && isset($_POST['passe'])) {
if(!file_exists("linux/scriptfiles/Joueurs/".$_POST['utilisateur'].".ini")) {
echo "Aucun compte n'existe avec ce nom.";
} else {
$inifile = parse_ini_file("linux/scriptfiles/Players/".$_POST['utilisateur'].".ini");
function udb_hash($buf) {
$length=strlen($buf);
$s1 = 1;
$s2 = 0;
for($n=0; $n<$length; $n++)
{
$s1 = ($s1 + ord($buf[$n])) % 65521;
$s2 = ($s2 + $s1) % 65521;
}
return ($s2 << 16) + $s1;
}
if(udb_hash(htmlentities($_POST['passe'])) == $inifile['Password']) {
$_SESSION['compte'] = htmlentities($_POST['utilisateur']);
header('Location: index.php');
} else { echo "Rй-essayez."; }
} }
Bonus : [URL="http://uptobox.com/mlfqlv1fkk0y"]Cliquez ici pour tйlйcharger le panel de Original World RфlePlay.[/URL] (Complet, v0.1)
Voilа, n'hйsitez pas а faire des remarques si j'ai oubliй quelque chose :)