SECURITE EN PHP
Fermé
JE2MENAGE
Messages postés
7
Date d'inscription
lundi 4 février 2019
Statut
Membre
Dernière intervention
6 février 2019
-
4 févr. 2019 à 16:54
JE2MENAGE Messages postés 7 Date d'inscription lundi 4 février 2019 Statut Membre Dernière intervention 6 février 2019 - 6 févr. 2019 à 14:20
JE2MENAGE Messages postés 7 Date d'inscription lundi 4 février 2019 Statut Membre Dernière intervention 6 février 2019 - 6 févr. 2019 à 14:20
A voir également:
- SECURITE EN PHP
- Mode securite - Guide
- Easy php - Télécharger - Divers Web & Internet
- Désactiver sécurité windows - Guide
- Retour a la ligne php ✓ - Forum PHP
- Sécurité du matériel standard non prise en charge - Windows 11
7 réponses
jordane45
Messages postés
38353
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
27 décembre 2024
4 719
4 févr. 2019 à 17:42
4 févr. 2019 à 17:42
Bonjour,
Tu dois donc modifier ta fonction
Il te faudra également modifier le code de connexion
par
Puis utiliser la fonction password_verify pour effectuer le test de validité du password....
Tu dois donc modifier ta fonction
public static function hashPassword($pass){ // return sha1(SALT.md5($pass.SALT).sha1(SALT)); $options = [ 'cost' => 12, ]; return password_hash($pass.SALT, PASSWORD_BCRYPT, $options); }
Il te faudra également modifier le code de connexion
$sql = 'SELECT * FROM users WHERE email=:email AND password=:password limit 1';
par
$sql = 'SELECT * FROM users WHERE email=:email limit 1';
Puis utiliser la fonction password_verify pour effectuer le test de validité du password....
JE2MENAGE
Messages postés
7
Date d'inscription
lundi 4 février 2019
Statut
Membre
Dernière intervention
6 février 2019
4 févr. 2019 à 18:56
4 févr. 2019 à 18:56
Merci bien pour votre disponibilité,
Je viens de texter, mais il y'a des messages d'erreurs dans le fichier register.php et login.php
dans le fichier auth.php
j'ai modifier comme sa
ancien code source
Par celui là
dans register.php
ce code
je l'es remplacer par celui là
dans le fichier login.php
je remplace cette ligne
par celle là
et voici les message d'erreur
1/ register.php :-FATAl error: Class 'Auth' not found in c/............/register.php on line 98
2/ login.php: fatal error:
Call to undefined function password_hash() in c/......../auth.php on line 30
c'est à dire cette ligne (partie du code)
merci encore
Je viens de texter, mais il y'a des messages d'erreurs dans le fichier register.php et login.php
dans le fichier auth.php
j'ai modifier comme sa
ancien code source
public static function hashPassword($pass){ return sha1(SALT.md5($pass.SALT).sha1(SALT)); } public static function isadmin($db){ if(isset($_SESSION['user']['role']) && (Auth::hashPassword('admin') == $_SESSION['user']['role'])){ return true; } return false; } }
Par celui là
// return sha1(SALT.md5($pass.SALT).sha1(SALT)); $options = [ 'cost' => 12, ]; return password_hash($pass.SALT, PASSWORD_BCRYPT, $options); }
dans register.php
ce code
$hash_pass = sha1($pass1); $q = $db->prepare('INSERT INTO users(pseudo, email, password, ip, created) VALUES(:pseudo, :email, :password, :ip, now())'); $q->execute(array( 'pseudo' => $pseudo, 'email' => $email, 'password' => $hash_pass, 'ip' => $_SERVER['REMOTE_ADDR'] ));
je l'es remplacer par celui là
$password = Auth::hashPassword($_POST['password']); $token = sha1(uniqid(rand()));
dans le fichier login.php
je remplace cette ligne
$sql = 'SELECT * FROM users WHERE email=:email AND password=:password limit 1';
par celle là
$sql = 'SELECT * FROM users WHERE email=:email limit 1';
et voici les message d'erreur
1/ register.php :-FATAl error: Class 'Auth' not found in c/............/register.php on line 98
2/ login.php: fatal error:
Call to undefined function password_hash() in c/......../auth.php on line 30
c'est à dire cette ligne (partie du code)
// return sha1(SALT.md5($pass.SALT).sha1(SALT)); $options = [ 'cost' => 12, ]; return password_hash($pass.SALT, PASSWORD_BCRYPT, $options); }
merci encore
jordane45
Messages postés
38353
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
27 décembre 2024
4 719
4 févr. 2019 à 19:40
4 févr. 2019 à 19:40
Déjà... peux tu nous reposter l'intégralité du code modifié ?
ensuite.. en quelle version de PHP es tu ?
Car.. pour rappel.. la fonction password_hash n'est dispo qu'à partir de la 5.5 ....
ensuite.. en quelle version de PHP es tu ?
Car.. pour rappel.. la fonction password_hash n'est dispo qu'à partir de la 5.5 ....
JE2MENAGE
Messages postés
7
Date d'inscription
lundi 4 février 2019
Statut
Membre
Dernière intervention
6 février 2019
4 févr. 2019 à 22:23
4 févr. 2019 à 22:23
php 5.5
code modifier du fichier auth.php
ensuite le code modifier du fichier register.php
et enfin le fichier login.php
Merci encore pour votre assistance
code modifier du fichier auth.php
<?php /** * Auth */ class Auth{ public static function islog($db){ if(isset($_SESSION['user']) && isset($_SESSION['user']['email']) && isset($_SESSION['user']['password'])){ $data =array( 'email'=>$_SESSION['user']['email'], 'password'=>$_SESSION['user']['password'] ); $sql = 'SELECT * FROM users WHERE email=:email AND password=:password limit 1'; $req = $db->tquery($sql,$data); if(!empty($req)){ return true; } } return false; } public static function hashPassword($pass){ $options = [ 'cost' => 12, ]; return password_hass($pass.SALT, PASSWORD_BCRYPT, $options); } public static function isadmin($db){ if(isset($_SESSION['user']['role']) && (Auth::hashPassword('admin') == $_SESSION['user']['role'])){ return true; } return false; } }
ensuite le code modifier du fichier register.php
<?php //Vérification du pseudo if(!empty($_POST['pseudo_check'])){ $pseudo = $_POST['pseudo_check']; $pseudo = preg_replace('#[^a-z0-9]#i', '', $pseudo); // filter everything but letters and numbers if(strlen($pseudo) < 3 || strlen($pseudo) > 16){ echo '<br/>3 à 16 caractètres SVP.'; exit(); } if(is_numeric($pseudo[0])){ echo '<br/>Le pseudo doit commencer par une lettre.'; exit(); } //Connexion à la base de données require "includes/connect_db.php"; $q = $db->prepare('SELECT id FROM users WHERE pseudo = ?'); $q->execute(array($pseudo)); $numRows = $q->rowCount(); if($numRows > 0){ echo '<br/>Pseudo déjà utilisé !'; exit(); } else { echo 'success'; exit(); } } //Vérification des mots de passe if(!empty($_POST['pass1_check']) && !empty($_POST['pass2_check'])){ if(strlen($_POST['pass1_check']) < 6 || strlen($_POST['pass1_check']) < 6){ echo '<br/>Trop court (6 caractères minimum)'; exit(); } else if($_POST['pass1_check'] == $_POST['pass2_check']){ echo 'success'; exit(); } else { echo '<br/>Les deux mots de passe sont différents'; exit(); } } //Vérification de l'email if(!empty($_POST['email_check'])){ $email = $_POST['email_check']; //Vérifier l'adresse mail if(!filter_var($email, FILTER_VALIDATE_EMAIL)){ echo '<br/>Adresse email invalide !'; exit(); } //Connexion à la base de données require "includes/connect_db.php"; $q = $db->prepare('SELECT id FROM users WHERE email = ?'); $q->execute(array($email)); $numRows = $q->rowCount(); if($numRows > 0){ echo '<br/>Adresse email déjà utilisée !'; exit(); } else { echo 'success'; exit(); } } //Traitement de l'inscription if(isset($_POST['pseudo'])){ require "includes/connect_db.php"; extract($_POST); $pseudo = preg_replace('#[^a-z0-9]#i', '', $pseudo); // filter everything but letters and numbers $q = $db->prepare('SELECT id FROM users WHERE pseudo = ?'); $q->execute(array($pseudo)); $pseudo_check = $q->rowCount(); $q = $db->prepare('SELECT id FROM users WHERE email = ?'); $q->execute(array($email)); $email_check = $q->rowCount(); if(empty($nom) || empty($prenom) || empty($pseudo)|| empty($pass1) || empty($pass2) || empty($email)){ echo "Tous les champs n'ont pas été remplis."; } else if($pseudo_check > 0) { echo "Pseudo déjà utilisé"; } else if($email_check > 0) { echo "Cette adresse mail est déjà utilisée"; } else if(strlen($pseudo) < 3 || strlen($pseudo) > 16) { echo "Pseudo éronné !"; } else if(is_numeric($pseudo[0])) { echo "Le pseudo doit commencer par une lettre."; } else if($pass1 != $pass2) { echo "Les mots de passe ne correspondent pas."; } else { $password = Auth::hashPassword($_POST['password']); $token = sha1(uniqid(rand())); $q = $db->prepare('INSERT INTO users(pseudo, email, password, token, ip, created_at) VALUES(:pseudo, :email, :password, :token, :ip, now())'); $q->execute(array( 'pseudo' => $pseudo, 'email' => $email, 'password' => $hash_pass, 'token' => $token, 'ip' => $_SERVER['REMOTE_ADDR'] )); $user_id = $db->lastInsertId(); if(!file_exists( "members/$user_id")){ mkdir("members/$user_id", 0755); }
et enfin le fichier login.php
<?php if(isset($_GET['logout'])){ if(isset($_SESSION['user'])){ unset($_SESSION['user']); } $_SESSION['message'] = "Vous êtes maintenant déconnecté. A bientôt!"; } if(isset($_POST) && !empty($_POST['password']) && !empty($_POST['email'])){ $email = addslashes($_POST['email']); // modifier sha1 par Auth::hashPassword(); $password = Auth::hashPassword($_POST['password']); $data = array( 'email'=>$email, 'password'=>$password ); $sql = 'SELECT * FROM users WHERE email=:email AND password=:password limit 1'; // $sql = 'SELECT * FROM users WHERE email=:email limit 1'; $req = $DB->tquery($sql,$data); if(!empty($req)){ // user existe if($req[0]['active'] == 1){ $_SESSION['user'] = $req[0]; $_SESSION['user']['role'] = Auth::hashPassword($_SESSION['user']['role']); $_SESSION['messasge'] = "Bienvenue , Vous êtes maintenant connecté ."; header('location:index.php'); }else{ $_SESSION['erreur'] = "Compte user non actif ,veuillez vérifier votre méssagerie pour activer le compte"; } } else{ $_SESSION['erreur'] = "Votre email et/ou mot de passe sont invalides !."; } } require 'includes/header.php';?> <!-- message de session --> <?php if (isset($_SESSION['message'])): ?> <div class="message"> <?php echo $_SESSION['message']; ?></div> <?php unset($_SESSION['message']) ?> <?php endif ?> <?php if (isset($_SESSION['erreur'])): ?> <div class="errorMessage"> <?php echo $_SESSION['erreur']; ?></div> <?php unset($_SESSION['erreur']) ?> <?php endif ?> <!-- formulaire d'inscription --> <form action="login.php" method="post" id="login"> <h2>Connexion</h2> <p> <label for="email" >Email :</label> <input type="email" name="email" id ="email" value="<?php echo isset($_POST['email'])?$_POST['email']:''; ?>"> </p> <?php if (!empty($erreur_email)): ?> <div class="error"><?php echo $erreur_email; ?></div> <?php endif ?> <p> <label for="password" >Mot de passe :</label> <input type="password" name="password" id ="password"> </p> <?php if (!empty($erreur_password)): ?> <div class="error"><?php echo $erreur_password; ?></div> <?php endif ?> <p> <input type="submit" value ="Se connecter"> </p> </form>
Merci encore pour votre assistance
jordane45
Messages postés
38353
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
27 décembre 2024
4 719
4 févr. 2019 à 23:05
4 févr. 2019 à 23:05
En même temps.. normal...
ce n'est pas
mais
ce n'est pas
return password_hass($pass.SALT, PASSWORD_BCRYPT, $options);
mais
return password_hash($pass.SALT, PASSWORD_BCRYPT, $options);
JE2MENAGE
Messages postés
7
Date d'inscription
lundi 4 février 2019
Statut
Membre
Dernière intervention
6 février 2019
Modifié le 5 févr. 2019 à 18:58
Modifié le 5 févr. 2019 à 18:58
Salut Jordane
Après plusieurs éssaie et changement j'ai toujours le même message d'erreur.
mais quand je change la fonction en SHA1, sa passe sans souci.
j'ai aussi changer la version de PHP 5.5 à 5.6.
Fatal error: Class 'Auth' not found in C:\Program Files (x86)\EasyPHP-Devserver-17\eds-www\register.php on line 98
auth.php
register.php on line 98
Merci encore
Après plusieurs éssaie et changement j'ai toujours le même message d'erreur.
mais quand je change la fonction en SHA1, sa passe sans souci.
j'ai aussi changer la version de PHP 5.5 à 5.6.
Fatal error: Class 'Auth' not found in C:\Program Files (x86)\EasyPHP-Devserver-17\eds-www\register.php on line 98
auth.php
public static function hashPassword($pass){ $options = [ 'cost' => 12, ]; return password_hash($pass.SALT, PASSWORD_BCRYPT, $options); } public static function isadmin($db){ if(isset($_SESSION['user']['role']) && (Auth::hashPassword('admin') == $_SESSION['user']['role'])){ return true; } return false; } }
register.php on line 98
$password = Auth::hashPassword($_POST['password']);
Merci encore
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
JE2MENAGE
Messages postés
7
Date d'inscription
lundi 4 février 2019
Statut
Membre
Dernière intervention
6 février 2019
5 févr. 2019 à 19:09
5 févr. 2019 à 19:09
Et voici mon fichier register.php
<?php //Vérification du pseudo if(!empty($_POST['pseudo_check'])){ $pseudo = $_POST['pseudo_check']; $pseudo = preg_replace('#[^a-z0-9]#i', '', $pseudo); // filter everything but letters and numbers if(strlen($pseudo) < 3 || strlen($pseudo) > 16){ echo '<br/>3 à 16 caractètres SVP.'; exit(); } if(is_numeric($pseudo[0])){ echo '<br/>Le pseudo doit commencer par une lettre.'; exit(); } //Connexion à la base de données require "includes/connect_db.php"; $q = $db->prepare('SELECT id FROM users WHERE pseudo = ?'); $q->execute(array($pseudo)); $numRows = $q->rowCount(); if($numRows > 0){ echo '<br/>Pseudo déjà utilisé !'; exit(); } else { echo 'success'; exit(); } } //Vérification des mots de passe if(!empty($_POST['pass1_check']) && !empty($_POST['pass2_check'])){ if(strlen($_POST['pass1_check']) < 6 || strlen($_POST['pass1_check']) < 6){ echo '<br/>Trop court (6 caractères minimum)'; exit(); } else if($_POST['pass1_check'] == $_POST['pass2_check']){ echo 'success'; exit(); } else { echo '<br/>Les deux mots de passe sont différents'; exit(); } } //Vérification de l'email if(!empty($_POST['email_check'])){ $email = $_POST['email_check']; //Vérifier l'adresse mail if(!filter_var($email, FILTER_VALIDATE_EMAIL)){ echo '<br/>Adresse email invalide !'; exit(); } //Connexion à la base de données require "includes/connect_db.php"; $q = $db->prepare('SELECT id FROM users WHERE email = ?'); $q->execute(array($email)); $numRows = $q->rowCount(); if($numRows > 0){ echo '<br/>Adresse email déjà utilisée !'; exit(); } else { echo 'success'; exit(); } } //Traitement de l'inscription if(isset($_POST['pseudo'])){ require "includes/connect_db.php"; extract($_POST); $pseudo = preg_replace('#[^a-z0-9]#i', '', $pseudo); // filter everything but letters and numbers $q = $db->prepare('SELECT id FROM users WHERE pseudo = ?'); $q->execute(array($pseudo)); $pseudo_check = $q->rowCount(); $q = $db->prepare('SELECT id FROM users WHERE email = ?'); $q->execute(array($email)); $email_check = $q->rowCount(); if(empty($nom) || empty($prenom) || empty($pseudo)|| empty($pass1) || empty($pass2) || empty($email)){ echo "Tous les champs n'ont pas été remplis."; } else if($pseudo_check > 0) { echo "Pseudo déjà utilisé"; } else if($email_check > 0) { echo "Cette adresse mail est déjà utilisée"; } else if(strlen($pseudo) < 3 || strlen($pseudo) > 16) { echo "Pseudo éronné !"; } else if(is_numeric($pseudo[0])) { echo "Le pseudo doit commencer par une lettre."; } else if($pass1 != $pass2) { echo "Les mots de passe ne correspondent pas."; } else { $password = Auth::hash_Password($_POST['password']); $token = sha1(uniqid(rand())); $q = $db->prepare('INSERT INTO users(pseudo, email, password, token, ip, created_at) VALUES(:pseudo, :email, :password, :token, :ip, now())'); $q->execute(array( 'pseudo' => $pseudo, 'email' => $email, 'password' => $hash_pass, 'token' => $token, 'ip' => $_SERVER['REMOTE_ADDR'] )); $user_id = $db->lastInsertId(); if(!file_exists( "members/$user_id")){ mkdir("members/$user_id", 0755); }
jordane45
Messages postés
38353
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
27 décembre 2024
4 719
5 févr. 2019 à 19:29
5 févr. 2019 à 19:29
Déjà...
je vois , à plusieurs endroits dans ton code ...des
Il n'en faut qu'un au début de ton script !
Ensuite, je ne vois pas l'include de ta class Auth
Je vois également que tu n'appliques pas les conseils concernant l'exécution des requêtes PDO ni l'activation des erreurs PHP
Je t'invite donc à appliquer le contenu de ces deux liens :
https://forums.commentcamarche.net/forum/affich-37584941-php-pdo-gerer-les-erreurs
https://forums.commentcamarche.net/forum/affich-37584947-php-gestion-des-erreurs-debogage-et-ecriture-du-code
Si les soucis persistent après avoir mis en application ces conseils.. reviens nous voir avec le code modifié et les éventuels messages d'erreurs.
je vois , à plusieurs endroits dans ton code ...des
require "includes/connect_db.php";
Il n'en faut qu'un au début de ton script !
Ensuite, je ne vois pas l'include de ta class Auth
Je vois également que tu n'appliques pas les conseils concernant l'exécution des requêtes PDO ni l'activation des erreurs PHP
Je t'invite donc à appliquer le contenu de ces deux liens :
https://forums.commentcamarche.net/forum/affich-37584941-php-pdo-gerer-les-erreurs
https://forums.commentcamarche.net/forum/affich-37584947-php-gestion-des-erreurs-debogage-et-ecriture-du-code
Si les soucis persistent après avoir mis en application ces conseils.. reviens nous voir avec le code modifié et les éventuels messages d'erreurs.
JE2MENAGE
Messages postés
7
Date d'inscription
lundi 4 février 2019
Statut
Membre
Dernière intervention
6 février 2019
5 févr. 2019 à 20:49
5 févr. 2019 à 20:49
ok. et merci encore
JE2MENAGE
Messages postés
7
Date d'inscription
lundi 4 février 2019
Statut
Membre
Dernière intervention
6 février 2019
6 févr. 2019 à 14:20
6 févr. 2019 à 14:20
ok, je corrige et je vous reviens.
Mais avec ce code dans notre fichier auth.php
Tous passe bien. mais c'est parce qu'on veux améliorer la sécurité qu'on juger utile d'utiliser le password_hash. et c'est d'ailleurs cette nouvelle fonction (password_hash) qui n'est pas reconnu.
Mais avec ce code dans notre fichier auth.php
public static function hashPassword($pass){ return sha1(SALT.md5($pass.SALT).sha1(SALT)); } public static function isadmin($db){ if(isset($_SESSION['user']['role']) && (Auth::hashPassword('admin') == $_SESSION['user']['role'])){ return true; } return false; } }
Tous passe bien. mais c'est parce qu'on veux améliorer la sécurité qu'on juger utile d'utiliser le password_hash. et c'est d'ailleurs cette nouvelle fonction (password_hash) qui n'est pas reconnu.