[PHP] login con password_verify

luigi777

Utente Attivo
14 Feb 2008
1.073
1
38
38
Massa, Italy
Secondo voi va bene fatto cosi ?. ho protezione dagli attacchi ?. Essendo che nella fase di registrazione uso:

$hash = password_hash($password, PASSWORD_DEFAULT);

Grazie mille e aspetto informazioni ecco il codice:

PHP:
<?php
include($_SERVER['DOCUMENT_ROOT'].'inc.php');

$message = 'Login ??';
if(isset($_POST["login"]))
{
    if (empty($_POST['username']) && empty($_POST['password']))
    {
          $message = "inserire username e password";
    }else {

    $records = dbConnect()->prepare('SELECT * FROM users WHERE username = :username');
    $records->bindParam(':username', $_POST['username']);
    $records->execute();
    $results = $records->fetch(PDO::FETCH_ASSOC);

    $message = '';

    if($records->rowCount() > 0 && password_verify($_POST['password'], $results['password']) ){

    session_start();

    $_SESSION['id'] = $results['id'];
    $_SESSION['username'] = $results['username'];
    header("Location: home.php");

    } else {
    $message = 'Sorry, password or username not found';
}
}
}
?>
<?php echo $message; ?>
<h1>Login</h1>
<form method="POST">
  <input type="text" name="username"><br />
  <input type="password" name="password"><br />
  <input type="submit" name="login">
</form>
 

maxnegri

Utente Attivo
12 Ott 2004
87
0
6
Ciao io utilizzerei
PHP:
 mysqli_real_escape_string
che pulisce la stringa da eventuale codice malevole.
PHP:
$username = $_POST["username"];
$username = mysqli_real_escape_string($conn,$username);
 

Flaviors200

Nuovo Utente
2 Gen 2019
6
0
1
Hai fatto benissimo!

In PHP per salvare gli hash delle password bisogna usare password_hash(), che di default utilizza bcrypt come funzione di hash. L'alternativa ottimale sarebbe Argon2, ma con bcrypt si è già al sicuro da attacchi di brute force.

Se vuoi approfondire ne ho parlato nel mio blog in un articolo dedicato a come salvare in maniera sicura le password in PHP.

Ciao io utilizzerei
PHP:
 mysqli_real_escape_string
che pulisce la stringa da eventuale codice malevole.
PHP:
$username = $_POST["username"];
$username = mysqli_real_escape_string($conn,$username);
Utilizza già PDO e i prepared statement, non ha bisogno di mysqli :)
 

luigi777

Utente Attivo
14 Feb 2008
1.073
1
38
38
Massa, Italy
infatti non uso mysqli perché ho letto in giro in inglese .. che la vorrebbero togliere anche quella ed usare solo pdo.
ti ringrazio molto e mi leggo il tuo blog.
grazie mille.