Visualizzazione risultati 1 fino 2 di 2
Like Tree1Likes
  • 1 Post By dreadnaut

Discussione: registrazione e login con pass salvata in hash

  1. #1
    fcfclean non è connesso Utente
    Data registrazione
    17-09-2014
    Messaggi
    140

    Predefinito registrazione e login con pass salvata in hash

    buona sera sto tentando di creare il login con password verify sto modificando dei codici già esistenti in fase di registrazione sakva la password criptata ma ho difficoltà a eseguire il login
    Codice PHP:
    login----<?php
    require('db.php');
    session_start();
    // When form submitted, check and create user session.
    if (isset($_POST['username'])) {
    $username = stripslashes($_REQUEST['username']); // removes backslashes
    $username = mysqli_real_escape_string($con, $username);
    $password = stripslashes($_REQUEST['password']);
    $password = mysqli_real_escape_string($con, $password);

    if (
    password_verify($password, $user['password'])) {
    {
    // Check user is exist in the database
    $query = "SELECT * FROM `users` WHERE username='$username'
    AND password='
    $password'";
    $result = mysqli_query($con, $query) or die(mysql_error());
    $rows = mysqli_num_rows($result);
    if (
    $rows == 1) {
    $_SESSION['username'] = $username;
    // Redirect to user dashboard page
    header("Location: dashboard.php");
    } else {
    echo
    "<div class='form'>
    <h3>Incorrect Username/password.</h3><br/>
    <p class='link'>Click here to <a href='login.php'>Login</a> again.</p>
    </div>"
    ;
    }
    } else {
    ?>
    -----------------
    registrazione

    <?php
    require('db.php');
    // When form submitted, insert values into the database.
    if (isset($_REQUEST['username'])) {
    // removes backslashes
    $username = stripslashes($_REQUEST['username']);
    //escapes special characters in a string
    $username = mysqli_real_escape_string($con, $username);
    $email = stripslashes($_REQUEST['email']);
    $email = mysqli_real_escape_string($con, $email);
    $password = stripslashes($_REQUEST['password']);
    $password = password_hash($password, PASSWORD_DEFAULT);
    $create_datetime = date("Y-m-d H:i:s");
    $query = "INSERT into `users` (username, password, email, create_datetime)
    VALUES ('
    $username', '$password', '$email', '$create_datetime')";
    $result = mysqli_query($con, $query);
    if (
    $result) {
    echo
    "<div class='form'>
    <h3>You are registered successfully.</h3><br/>
    <p class='link'>Click here to <a href='login.php'>Login</a></p>
    </div>"
    ;
    } else {
    echo
    "<div class='form'>
    <h3>Required fields are missing.</h3><br/>
    <p class='link'>Click here to <a href='registration.php'>registration</a> again.</p>
    </div>"
    ;
    }
    } else {
    ?>

  2. #2
    L'avatar di dreadnaut
    dreadnaut non è connesso Super Moderatore
    Data registrazione
    22-02-2004
    Messaggi
    6,306

    Predefinito

    Metti che vengo sul tuo sito e mi registro come dreadnaut con password 12"34.

    Il tuo codice di registrazione fa l'escape della password e la converte in 12"34, poi salva l'hash della password nel database. Fare l'escape in questo caso non serve, perché nel database ci finisce l'hash.

    Quanto torno a fare login, di nuovo fai l'escape della password, e poi confronti 12"34 con il contenuto di $user['password']... ma questa variabile non esiste!

    Dopo aver fatto il confronto, vai a cercare utente e password nel database. Ma nel database c'è l'hash, non la password.


    Il processo corretto per il login sarebbe:

    - l'utente invia nome utente e password
    - fai escape del nome utente, e cerchi l'utente nel database
    - se non lo trovi, errore: "nome utente e password sconosciuti"
    - usi password_verify per confrontare la password spedita dall'utente con l'hash che hai trovato nel database
    - se il confronto fallisce, errore: "nome utente e password sconosciuti"

    Lo stesso messaggio in entrambi i casi, per non dare indizi ad un malintenzionato
    fcfclean likes this.

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •