Sa marche, désolé :arf:
Version imprimable
Sa marche, désolé :arf:
Re :(,
Me voilà de retour parce que je viens de remarquer que l' utilisateur peut se connecter avec n'importe quel MDP !!
Y a t il quelqu' un pour jeter un coup d' oeil parce je ne vois pas l' erreur
Merci.
Code:
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 <?php session_start(); require("connexion.php"); $login = $_POST['login']; $mdp = $_POST['mdp']; if (isset($_POST['login'])) { if ($_POST['login'] != "" AND $_POST['mdp'] != "") { //je récupère l' utilisateur pour enfin me retourner qu' une seule ligne $reponse = $bdd->prepare('SELECT * FROM utilisateurs WHERE login =:login AND mdp=:mdp LIMIT 1;'); $reponse->bindParam(':login', $login); $reponse->bindParam(':mdp', $mdp); $reponse->execute(); $donnees = $reponse->fetch(); if (count($donnees) == 0) { echo 'Le mot de passe ou le login est incorrecte.'; die('Il faut faire quelque chose ici!!'); } //je vérifie s'il est contrôleur ou non if (($donnees['fonction'] == 'controleur') || ($donnees['fonction'] == 'inspecteur')) { $_SESSION['nom'] = $donnees['nom']; $_SESSION['prenom'] = $donnees['prenom']; $_SESSION['type'] = $donnees['type']; $_SESSION['idutilisateur'] = $donnees['idutilisateur']; $_SESSION['fonction'] = $donnees['fonction']; //s'il est contrôleur, donc redirection vers rechercheBisTest sinon, vers recherche header('Location: rechercheBisTest.php'); } else { header('Location: recherche.php'); } var_dump($donnees); } $reponse->closeCursor(); } else { echo "Veuillez entrer votre login et votre mot de passe."; }?>
Oui, mais si c'est pas le bon mot de passe , il est redirigé vers recherche.php ? si oui alors c'est normal
Je vois aussi dans ton code que tu ne tiens pas compte de nos remarques, alors pq nous poser des questions ?
En fait lorsque je rentre un nom d' utilisateur par exemple kk1 qui occupe la fonction de contrôleur, et je met n'importe quel MDP (qu' il soit ou non dans la BDD) et bien cela m' envoie vers la page [recherche.php].
Donc j' ai accès au fichier peu importe le MDP. Ce qui est chaud...
je n' arrive pas à trouver l' erreur, j' avoue que je suis bloqué
Merci pour ton retour,
j' en ai tenu compte , j' ai proposé de sécuriser tt ça mais il ne veut rien entendre.
Je suis le seul développeur dans cette boîte, ils m' ont accepté en stage que pour rafraichir leur site, même mon maître de stage n'y comprends rien
Ben change de boite, car c'est n'importe quoi.
Sinon, pour ta logique :
quoique je mette comme login et mot de passe, tant que c'est pas vide, alors je passe. luke et darkvador passeront sans problèmeCode:
1
2 if ($_POST['login'] != "" AND $_POST['mdp'] != "") {
De plus, j'avais déjà relever ce souci ici
Dans "il faut faire quelque chose ici", ça voulais dire rediriger autre partCode:
1
2
3
4
5
6 if (count($donnees) == 0) { echo 'Le mot de passe ou le login est incorrecte.'; die('Il faut faire quelque chose ici!!'); }
Bonjour,
tu as toujours un problème de LOGIQUE.
Et tu n'as tenu AUCUN compte de mes conseils.
En réorganisant le code et en indentant proprement :
:alerte: Retour sur le mot de passe EN CLAIR dans la BDD :Code:
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 <?php session_start(); require("connexion.php"); $login = ''; $mdp = ''; if ( isset($_POST['login']) && isset($_POST['mdp']) ) { $login = $_POST['login']; $mdp = $_POST['mdp']; if ( $login != "" && $mdp != "") { //on récupère l' utilisateur pour enfin me retourner qu' une seule ligne $reponse = $bdd->prepare('SELECT * FROM utilisateurs WHERE login = :login AND mdp = :mdp LIMIT 1;'); $reponse->bindParam(':login', $login); $reponse->bindParam(':mdp', $mdp); $reponse->execute(); $donnees = $reponse->fetch(); if ( $reponse && count($donnees) == 1 ) // OK : on a bien un résultat concordant { //s'il est contrôleur, redirection vers rechercheBisTest sinon, vers recherche //on vérifie s'il est contrôleur ou non if ( in_array($donnees['fonction'], array('controleur','inspecteur') ) ) { $_SESSION['nom'] = $donnees['nom']; $_SESSION['prenom'] = $donnees['prenom']; $_SESSION['type'] = $donnees['type']; $_SESSION['idutilisateur'] = $donnees['idutilisateur']; $_SESSION['fonction'] = $donnees['fonction']; header('Location: rechercheBisTest.php'); } else { // autres utilisateurs header('Location: recherche.php'); } } else { // PAS OK echo 'Le mot de passe ou le login est incorrecte.'; // -> il faut ré-afficher le formulaire de connexion } var_dump($donnees); } $reponse->closeCursor(); } else { echo "Veuillez entrer votre login et votre mot de passe."; // -> il faut ré-afficher le formulaire de connexion }
Tu expliqueras quand même à tes "patrons" que la sécurité n'est pas à prendre à la légère.
De plus, en cas de piratage, c'est TOI qui sera accusé de négligence (voire "faute grave").
Pas eux.
Mdrrrr,
J' en suis conscient des risques, jte le fais pas diredans tous les cas je finis mon stage le 4 septembre pour enchaîner 9 mois sur une formation Android/ JavaScript avec comme framework React Native.
Alors sans te mentir je suis déjà sur du JavaScript lol.
Au niveau du code j' ai pensé à un ISSET
Code:if (isset($_POST['login'] AND (isset($_POST...))
regarde les deux post juste au dessus , il y a les solutions
Merci pour ton retour jreaux62,
en fait mon but dans ce stage était de récupérer des fichiers de code ( j' ai mis 2 semaines pour les + ou - les comprendre car aucune note) pour soit les rafraîchir, donner accès à certains comme c'est le cas .
Mais je t'avoue que je leur ai dit dès le 1er jour que leur BDD ainsi que tous leur fichiers étaient en danger.
En gros, on m' a fait comprendre que la boîte n' avait pas le temps pour ça ni le temps à dépenser de l' argent, j' ai tout de même préciser qu' ils encouraient un énorme risque.
En tout cas ce n' est pas que je travaillerais, parce qu' il ya un énorme chantier lol
MaitrePylos, merci , j' avais pourtant vérifier si on pouvait rediriger vers une page en utilisant un 'die' mais je n' avais rien vu, bien vu , je vais chercher la façon de le faire
Voilà un script finalisé :
Le jour où tu auras décidé d'avoir des mots de passe HASHE en BDD :ccool:, il suffira de remplacer par :Code:
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 <?php session_start(); require("connexion.php"); if ( isset($_POST['login']) && isset($_POST['mdp']) ) { $login = $_POST['login']; $mdp = $_POST['mdp']; if ( $login != "" && $mdp != "") { //on récupère l' utilisateur pour enfin me retourner qu' une seule ligne $reponse = $bdd->prepare( "SELECT idutilisateur, nom, prenom, mdp, type, fonction FROM utilisateurs WHERE login = :login" ); $reponse->bindParam(':login', $login); $reponse->bindParam(':mdp', $mdp); $reponse->execute(); $donnees = $reponse->fetch(); if (count($donnees) == 1) // OK : on a bien un résultat concordant pour CE LOGIN { // vérification du mot de passe if( $donnees['mdp'] == $mdp ) // 1- mdp EN CLAIR en BDD // if( password_verify($mdp, $donnees['mdp']) ) // 2- mdp HASHE avec password_hash en BDD { //s'il est contrôleur, redirection vers rechercheBisTest sinon, vers recherche //on vérifie s'il est contrôleur ou non if ( in_array($donnees['fonction'], array('controleur','inspecteur') ) ) { $_SESSION['nom'] = $donnees['nom']; $_SESSION['prenom'] = $donnees['prenom']; $_SESSION['type'] = $donnees['type']; $_SESSION['idutilisateur'] = $donnees['idutilisateur']; $_SESSION['fonction'] = $donnees['fonction']; header('Location: rechercheBisTest.php'); } else { // autres utilisateurs header('Location: recherche.php'); } } else { // PAS OK echo 'Le mot de passe ou le login est incorrecte.'; // -> il faut ré-afficher le formulaire de connexion } } else { // PAS OK echo 'Le mot de passe ou le login est incorrecte.'; // -> il faut ré-afficher le formulaire de connexion } var_dump($donnees); } $reponse->closeCursor(); } else { echo "Veuillez entrer votre login et votre mot de passe."; // -> il faut ré-afficher le formulaire de connexion }
Code:
1
2 // if( $donnees['mdp'] == $mdp ) // 1- mdp EN CLAIR en BDD if( password_verify($mdp, $donnees['mdp']) ) // 2- mdp HASHE avec password_hash en BDD
Merci infiniment,
je suis seul dans cette boîte, je n' ai pas assez d' expérience surtout en PHP malgré que c' est un langage + simple que d' autres.
Merci pour votre soutien en tout cas, ça me donne de l'énergie pour avancer !!:wink::wink:
Oups !
Correction :
Code:
1
2 if( $donnees['mdp'] == $mdp ) // 1- mdp EN CLAIR en BDD // if( password_verify($mdp, $donnees['mdp']) ) // 2- mdp HASHE avec password_hash en BDD
Justement j' étais dessus mais toujours une erreur qui s' affche
Code:
1
2 Le mot de passe ou le login est incorrecte.array(16) { ["idutilisateur"]=> string(3) "188" [0]=> string(3) "188" ["nom"]=> string(10) "*****" [1]=> string(10) "***" ["prenom"]=> string(4) "*****" [2]=> string(4) "****" ["login"]=> string(4) "****" [3]=> string(4) "" ["mdp"]=> string(8) "****" [4]=> string(8) "****" ["fonction"]=> string(14) "administrateur" [5]=> string(14) "administrateur" ["type"]=> string(1) "3" [6]=> string(1) "3" ["mail"]=> NULL [7]=> NULL } *** tableau de bord
Je t'ai déjà dit que ce n'est pas une "erreur".
C'est le résultat de cette ligne :
Qui ne sert qu'à VERIFIER (pendant les TESTS).Code:var_dump($donnees);
Il suffit de la supprimer.
N.B. Que tu ne saches pas, ce n'est pas grave.
Par contre, il faut faire preuve d'un peu plus de CURIOSITE, faire une RECHERCHE, et LIRE LA DOC : var_dump()
Pour réafficher le formulaire de connexion [index.php]
j' ai juste à mettre un?Code:header('Location: index.php');
Juste pour me rassurer lol
CURIOSITE !
et donc initiative.
Essaie, tu verras bien.
Je viens de le faire mais ça me fige sur ma page de connexion, comme un retour en arrière si tu veux, je n' ai ni accès à recherche.php ni à rechercheBistest.php