2017-12-25 8 views
-4

Titel. Es besteht die Überprüfung des Benutzernamens, die ich getestet habe. Ich habe einige Trimm-/Stripping-Tags verwendet, um SQL-Injektionen zu vermeiden. Aber im Moment ist der einzige Teil von Interesse, dass password_hash und password_verify die Prüfung jedes Mal nicht bestehen.password_verify gibt immer false zurück

Datenbank-Passwort-Feld ist BLOB, aber ich versuchte VARCHAR 255 und CHAR 255 auch.

Relevante Login Überprüfung:

if(isset($_POST["login"])){ 
$username = trim($_POST['username']); 
$username = strip_tags($username); 
$username = htmlspecialchars($username); 

$loginpassword = trim($_POST['password']); 
$loginpassword = strip_tags($loginpassword); 
$loginpassword = htmlspecialchars($loginpassword); 


$loginQuery= "SELECT * FROM members where username='$username'"; 
$result = mysqli_query($conn, $loginQuery); 
$row = mysqli_fetch_assoc($result); 
$hash = $row['password']; 
if(password_verify($loginpassword, $hash)){ 
    $_SESSION['username'] = $username; 
    header("Location: index.php"); 
} 
else{ 
    $loginErrorExists= TRUE; 
} 
} 

Relevante Registrierungscode:

if(isset($_POST["register"])){ 
$username = trim($_POST['username']); 
$username = strip_tags($username); 
$username = htmlspecialchars($username); 

$password = trim($_POST['password']); 
$password = strip_tags($username); 
$password = htmlspecialchars($username); 

$email = trim($_POST['email']); 
$email = strip_tags($email); 
$email = htmlspecialchars($email); 

$conflictUserQuery = "SELECT username FROM members WHERE username='$username'"; 
$conflictUserResult = mysqli_query($conn, $conflictUserQuery); 
$conflictUserRow = mysqli_fetch_array($conflictUserResult, MYSQLI_ASSOC); 
$conflictMailQuery = "SELECT email FROM members WHERE email='$email'"; 
$conflictMailResult = mysqli_query($conn, $conflictMailQuery); 
$conflictMailRow = mysqli_fetch_array($conflictMailResult, MYSQLI_ASSOC); 
if(mysqli_num_rows($conflictUserResult) ==1){ 
    $userConflictExists = TRUE; 
} 
elseif(mysqli_num_rows($conflictMailResult) ==1){ 
    $mailConflictExists = TRUE; 
} 

else{ 
    $hash = password_hash($password, PASSWORD_DEFAULT); 
    $registerQuery = mysqli_query($conn, "INSERT INTO members (username, password, email) VALUES ('$username', '$hash', '$email')"); 
    if($registerQuery){ 
     $_SESSION['username']= $username; 
     header("Location: index.php"); 
    } 
} 
} 
+0

Trimm- und Stripping-Tags schützen Sie nicht vor sql-Injektion. Sie sollten vorbereitete und parametrisierte Abfragen verwenden. Mysqli unterstützt es .. – JimL

+0

Trimmen/Strippen ist kaum genug, um SQL-Injektionen zu vermeiden. Nicht, dass es für den Missbrauch von password_hash relevant ist. Einige Datenbankauszüge/Eingabe/Ausgabe-Beispiele wären stattdessen nützlich. – mario

+0

Sie können eine Authentifizierungsbibliothek verwenden, die Art, wie Sie codieren, ist nicht sicher, überprüfen Sie dies: https://stackoverflow.com/questions/549/the-definitive-guide-to-form-based-website-authentication –

Antwort

0

Ich löste es durch völlig die Ordnung zu entfernen(), strip_tags() und htmlspecialchars() per Funk Forty Niner Vorschlag .

1

$ password = htmlspecialchars ($ username);
Ja, Sie hatten den $ username als Passwort!

Verwandte Themen