SECURITE EN PHP
JE2MENAGE
Messages postés
7
Date d'inscription
Statut
Membre
Dernière intervention
-
JE2MENAGE Messages postés 7 Date d'inscription Statut Membre Dernière intervention -
JE2MENAGE Messages postés 7 Date d'inscription Statut Membre Dernière intervention -
Salut à tous,
je suis nouveau ici et je demande de l'aide à tous, Nous avons bricolé 3 fichiers différents en php et nous souhaitons les harmoniser .
1/ dans un premier fichier nous avons config.php
nous avons ce code
2/ dans un utre fichier auth.php
nous avons cela
3/ dans un troisième fichier, register.php
nous avons celui là
4/ dans login.php
nous
Nous solicitons l'aide de tous car nous voulons harmoniser le tout en utilisant
Chose que nous avons dû mal à faire.
merci encore a tous
je suis nouveau ici et je demande de l'aide à tous, Nous avons bricolé 3 fichiers différents en php et nous souhaitons les harmoniser .
1/ dans un premier fichier nous avons config.php
nous avons ce code
define("SALT","une cle de cryptage");
2/ dans un utre fichier auth.php
nous avons cela
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; } }
3/ dans un troisième fichier, register.php
nous avons celui là
$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,
4/ dans login.php
nous
<?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'; $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 !."; } }
Nous solicitons l'aide de tous car nous voulons harmoniser le tout en utilisant
$options = [ 'cost' => 12, ]; echo password_hash("rasmuslerdorf", PASSWORD_BCRYPT, $options); ?>
Chose que nous avons dû mal à faire.
merci encore a tous
A voir également:
- SECURITE EN PHP
- Question de sécurité - Guide
- Votre appareil ne dispose pas des correctifs de qualité et de sécurité importants - Guide
- Mode securite - Guide
- Easy php - Télécharger - Divers Web & Internet
- Clé de sécurité windows 10 gratuit - Guide
7 réponses
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....
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
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
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
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); }
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.
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.