Salut, je voudrais savoir mon travail est correct, notamment en terme de sécurité
Mit à jour le 12/06/2019 à 10:10
L'index :
La page d'inscription :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72 <?php //SESSION session_start(); if (isset($_SESSION['name'])) { header('Location: ok.php'); exit(); } ?> <!DOCTYPEhtml> <html> <head> <meta charset="utf-8" /> <link rel="stylesheet" href="index.css" /> <title>fict.io - Connexion</title> </head> <body> <h1>CONNEXION</h1> <form id="connect_form" method="post" action="wrks/connect.php"> <div> <label for="login">Utilisateur</label> <input type="text" name="login" autofocus required /> </div> <div> <label for="password">Mot de passe</label> <input type="password" name="password" pattern="(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$" required /> </div> <input type="submit" value="Connexion" /> </form> <h1>INSCRIPTION</h1> <form id="subscribe_form" method="post" action="wrks/subscribe.php"> <div> <label for="login">Utilisateur</label> <input type="text" name="login" required /> </div> <div> <label for="password">Mot de passe</label> <input type="password" name="password" pattern="(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$" required /> </div> <div> <label for="confirm_password">Confirmer le mot de passe</label> <input type="password" name="confirm_password" pattern="(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$" required /> </div> <div> <label for="not_a_robot">17 + 25 (A écrire en toutes lettres)</label> <input type="text" name="not_a_robot" required /> </div> <input type="submit" value="Inscription" /> </form> </body> </html>
La page de connexion :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70 <?php //Démarrage de la session session_start(); //Connexion à la BDD $bdd = new PDO('mysql:host=localhost; dbname=fict_io; charset=utf8', 'user', '', array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION )); //Préparation de la commande $prep = $bdd->prepare('INSERT INTO accounts(username, password, level) VALUES(?, ?, 0)' ); //Vérification de l'entrée spam if (!isset($_POST['not_a_robot'])) { //Redirection_ERROR //header('Location: ../index.php'); } else { //Vérification de la clé spam if (md5($_POST['not_a_robot']) !== 'be2afdf0c7b6beabf937fc1672a920c7') { //Redirection_ERROR //header('Location: ../index.php'); } else { //Récupération des informations $login = $_POST['login']; $password = $_POST['password']; $confirm = $_POST['confirm_password']; $hashed_pass = password_hash($password, PASSWORD_ARGON2ID); //Préparation des paramètres $prep->bindParam(1, $login); $prep->bindParam(2, $hashed_pass); //Vérification du mot de passe if ($password !== $confirm) { //Redirection_ERROR //header('Location: ../index.php'); } else { //Vérification de la disponibilité du pseudonyme $user_fetch = $bdd->query('SELECT * FROM accounts'); while ($user = $user_fetch->fetch()) { if ($login === $user['username']) { //Redirection_ERROR header('Location: ../index.php'); } } //Ecriture de l'entrée BDD $prep->execute(); //Redirection_OK //header ('Location: ../index.php'); } } }
La page sécurisée :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54 <?php //debug $error_token = array(); //Connexion à la BDD $bdd = new PDO('mysql:host=localhost; dbname=fict_io; charset=utf8', 'user', '', array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION )); //Récupération des informations $login = $_POST['login']; $password = $_POST['password']; //Récupération des noms des comptes $users = $bdd->query('SELECT username FROM accounts'); $usernames = array (); while ($user = $users->fetch()) { array_push($usernames, $user['username']); } //Vérification de l'éxistance du comptes if (!in_array($login, $usernames)) { //Redirection_ERROR - WRONG_NAME //header('Location: ../index.php'); } else { //Vérification du mot de passe $pass = $bdd->query("SELECT password FROM accounts WHERE username='{$login}'"); while ($pw = $pass->fetch()) { if (!password_verify($password, $pw['password'])) { //Redirection_ERROR - WRONG_PASS header('Location: ../index.php'); } else { //Récupération des informations de la session session_start(); $_SESSION['name'] = $login; //Redirection_OK header('Location: ../index.php'); } } }
Voilà le pavé
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 <?php session_start(); session_destroy(); ?> <html> <head> <meta charset="utf-8" /> </head> <body> <p>OK</p> <a href="index.php">RETOUR</a> </body> </html>
Pour ceux qui voudraient les fichiers :
fict_io.rar
Voilà, un grand merci d'avance
Partager