LOCK THIS PLEASE
#1

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 HTML, en HTML pour une connexion on a besoin d'un formulaire.
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).

Код:
<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
PHP.

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)

Код:
<?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 :

Код:
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.

Код:
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.

Код:
$inifile = parse_ini_file("linux/scriptfiles/Joueurs/".$_POST['utilisateur'].".ini");
Maintenant qu'il est chargй, on peux vйrifier le mot de passe.

Код:
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.

Код:
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.



Code complet :

Код:
<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 : Cliquez ici pour tйlйcharger le panel de Original World RфlePlay. (Complet, v0.1)

Voilа, n'hйsitez pas а faire des remarques si j'ai oubliй quelque chose
Reply
#2

Okay, four things.
1) Why's it not in English?
2) It's in the wrong section, should be in Tutorials.
3) That code layout is horrible.
4) I don't see why it should be locked.
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)