IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

Cryptage avec PASSWORD_BCRYPT.


Sujet :

PHP & Base de données

  1. #1
    Membre averti
    Homme Profil pro
    Cyberdocumentaliste
    Inscrit en
    Mai 2017
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Cyberdocumentaliste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Mai 2017
    Messages : 23
    Par défaut Cryptage avec PASSWORD_BCRYPT.
    Bonjour à tous,

    J'essaie de changer changer mon système de cryptage. Jusqu'à maintenant je cryptais avec sha1 mes mots de passes. Ca fonctionne bien, pas de problèmes. Puis on m'a dis que c'était plus assez sécure, du coup j'ai décidé de changer. Mais le problème c'est que je n'arrive pas à le faire fonctionner. Il n'y a même aucun changement dans la base de donnée. J'ai pourtant suivi ce qu'ils indiquaient sur manual php, mais j'ai dû rater quelque chose.

    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
     
    <?php
    session_start();
     
    require("includes/init.php"); 
    include('filters/guest_filter.php');
     
     if (isset($_POST['login'])) {
     
    	 if (not_empty(['identifiant', 'password'])) {
     
    		 extract($_POST);
     
    		 $q = $db->prepare("SELECT id, pseudo, avatar, email,password AS hashed_password FROM users
    							WHERE (pseudo = :identifiant OR email = :identifiant)
    							:password AND active ='1'")
    		$q->execute(array(
    					'identifiant' => $identifiant,
    					//'password' => sha1($password)// A l'origine
    					));
     
    		//$userHasBeenFound = $q->rowCount();
    		$user = $q->fetch(PDO::FETCH_OBJ);
     
    		 if($user && password_verify($password, $user->hashed_password)) {// A l'origine if ($userHasBeenFound)
     
     
    				$user = $q->fetch(PDO::FETCH_OBJ);//Récupère l'objet
    				/*On garde son id, email et son pseudo en session.*/
    				$_SESSION['user_id'] = $user->id;
    				$_SESSION['pseudo'] = $user->pseudo;
    				$_SESSION['avatar'] = $user->avatar;
    				$_SESSION['email'] = $user->email;
     
    			redirect_intent_or('profile.php?id='.$user->id); 
     
    		}else{
    			 set_flash('Combinaison Identifiant/Password Incorrect', 'danger');  
    			 save_input_data();
    		}
     
    	 }
     
     } else {      
     
    		clear_input_data();  //S'il vient d'arriver les champs ne sont pas préremplis.
     
    		} 
    ?>
     
     
    <?php require ('views/login.view.php'); ?>
    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
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
     
    <?php
    session_start();//Démarre la session.
     
    require("includes/init.php");
    include('filters/guest_filter.php');
     
     
     
    //Si le formulaire a été soumis
    if(isset($_POST['register'])){
     
    	if(not_empty(['name','pseudo','email','password','password_confirm'])){
     
    		$errors = [];//Tableau contenant l'ensemble des erreurs
     
     
    		extract($_POST);
     
     
    		if(mb_strlen($pseudo) < 3){
     
    			$errors[] = "Pseudo trop court ! (minimum 3 caractères)";
    			}
     
    			if( !filter_var($email, FILTER_VALIDATE_EMAIL) ){//FILTER_VALIDATE_EMAIL Filtre si c'est un format email valide
    				$errors[] = "Adresse email invalide ! ";
    			}
     
    			if(mb_strlen($password) < 6){
     
    			$errors[] = "Mot de passe trop court ! (minimum 6 caractères)";
    			} else{
    				if($password != $password_confirm){
    					$errors[] = "Les deux mots de passe ne concordent pas ! ";
    				}
    			}
    			if(is_already_in_use('pseudo', $pseudo, 'users')){
    				$errors[] = "Pseudo déjà utilisé ! ";
    			}
    			if(is_already_in_use('email', $email, 'users')){
    				$errors[] = "Adresse E-mail déjà utilisé ! ";
    			}
    			if(count($errors) == 0){
    				//Envoi d'email d'activation
    				$to = $email;
    				$subject = WEBSITE_NAME. " - ACTIVATION DE COMPTE";
    				/********************************************************/
    				/*nouveau hashage de mot de passe                       */
    				$password = password_hash($password, PASSWORD_BCRYPT);
    				/********************************************************/
    				//$password = sha1($password);
    				//$token = sha1($pseudo.$email.$password);//Le token c'est le pseudo, le password et l'email concaténé
     
    				//Récupération du mail déjà formaté
    				ob_start();//Garde tous ce qu'on va faire dans la mémoire tampon
    				require('templates/emails/activation.tmpl.php');//Inclus le fichier sans l'afficher
    				$content = ob_get_clean();
     
     
     
     
     
    				$faiMail = ini_set("SMTP", "smtp.orange.fr"); // fai = Fournisseur d'Accès Internet
    				$portMail = ini_set("smtp_port", "25"); // Le numéro du port change en fonction du FAI. Pour Orange, c'est le port 25 (pour envoyer des emails).
    				$mailSender = ini_set("sendmail_from", "drouetphilippe1@gmail.com"); // Tu peux mettre l'adresse email que tu veux.
     
    				$headers = 'MIME-Version: 1.0' . "\r\n"; 
    				$headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n"; 
     
    				//Envoi du mail d'activation
    				mail($to, $subject, $content, $headers);//Envoi le mail
     
    				/********************************/
    				/*On met les informations en bdd*/
    				/********************************/
    				$q = $db->prepare('INSERT INTO users(name, pseudo, email, password)
    									VALUES(:name, :pseudo, :email, :password)');
     
    				$q->execute([
    					'name' => $name,
    					'pseudo' => $pseudo,
    					'email' => $email,
    					'password' => $password
    				]);	
     
     
    				set_flash("Mail d'activation envoye ! ", 'success');//Message de succès
    				redirect('index.php');//On peut mettre : header('Location: index.php');à la place de redirect
    				//exit(); à ajouter si on utilise le header
    						/******************************/
     
    			} else{
    				save_input_data();
    			}
     
    	}else {
    		$errors[]= "Veuillez remplir tout les champs ! ";
    		save_input_data();
    	}
    }
    else{
    	clear_input_data();//Fonction qui permet de détruire toutes 
    	//les informations en session si on revient sur inscription 
    	//après que celle-ci soit acceptée.
    }
    ?>
     
    <?php require('views/register.view.php');?>
    J'ai laissé l'ancien "système" en commentaire.

    Si quelqu'un voit quelque chose que je n'aurais pas vu ou bien pas compris, qu'il n'hésite pas.

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Il n'y a même aucun changement dans la base de donnée
    Si les utilisateurs n'ont pas remis un mot de passe avec le nouveau chiffrement, ça ne peut pas fonctionner.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre averti
    Homme Profil pro
    Cyberdocumentaliste
    Inscrit en
    Mai 2017
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Cyberdocumentaliste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Mai 2017
    Messages : 23
    Par défaut
    A oui pardon, j'avais oublié de préciser, cela a été testé. J'ai mis un nouveau mot de passe avec le nouveau chiffrement, mais justement, cela n'a pas fonctionné.

  4. #4
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Déjà n'utilise pas extract(), c'est une mauvaise pratique.

    Ensuite tu as un ":password" qui se ballade dans ta requête.

    Pour fini, tu ne peux pas avoir deux fois le même nom de paramètre dans la requête.

    Au passage, il n'y a pas besoin de " pour ta valeur numérique 1.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     $q = $db->prepare("SELECT id, pseudo, avatar, email,password AS hashed_password FROM users
    							WHERE (pseudo = :pseudo OR email = :email)
    							AND active = 1")
    		$q->execute(array(
    					':pseudo' => $_POST['identifiant'],
    					':email' => $_POST['identifiant']
    		));
    Pense à activer les erreurs PDO
    http://php.net/manual/fr/pdo.error-handling.php
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  5. #5
    Membre averti
    Homme Profil pro
    Cyberdocumentaliste
    Inscrit en
    Mai 2017
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Cyberdocumentaliste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Mai 2017
    Messages : 23
    Par défaut
    Merci beaucoup pour ta réponse rapide.

    Je vais tester tous ça et je te tiendrai au courant.

    Encore merci et bonne soirée.

  6. #6
    Membre averti
    Homme Profil pro
    Cyberdocumentaliste
    Inscrit en
    Mai 2017
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Cyberdocumentaliste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Mai 2017
    Messages : 23
    Par défaut
    C'est bon tout est ok. C'était bien ça et un ";" que j'avais pas mis.

    J'irai jeté un coup d’œil pour les erreurs PDO.

    Encore merci.

    Bon w-e.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Cryptage avec md5sum
    Par Jerepain dans le forum Linux
    Réponses: 4
    Dernier message: 19/11/2007, 21h13
  2. Cryptage avec oracle 9i
    Par simona dans le forum Oracle
    Réponses: 1
    Dernier message: 03/08/2007, 17h20
  3. cryptage avec RSA sous visual C++
    Par ryoussef19 dans le forum VC++ .NET
    Réponses: 17
    Dernier message: 30/05/2007, 10h10
  4. Protection d'un fichier par cryptage avec gpg
    Par Michaël dans le forum Sécurité
    Réponses: 1
    Dernier message: 30/01/2007, 14h10
  5. cryptage avec HSQLDB
    Par chti_juanito dans le forum Autres SGBD
    Réponses: 1
    Dernier message: 03/05/2006, 08h44

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo