2017-03-10 4 views
-2

Ich habe eine users.txt Datei mit Benutzernamen und Passwörtern in diesem Format (für Bildungszwecke muss es in einer .TXT Datei sein):
username1: password1
username2: passwort2php checkin wenn Benutzername und Passwort korrekt sind .txt Datei

Passwörter sind mit md5 verschlüsselt. Ich habe auch eine Login-Seite, auf der Benutzer Benutzername und Passwort eingeben. Meine Frage ist, wie überprüfe ich, ob Benutzername und Passwort, die der Benutzer eingibt, korrekt sind?

+0

Was haben Sie versucht, dies selbst zu lösen? –

+0

Die Verwendung einer Hash-Funktion ist nicht ausreichend und nur das Hinzufügen eines Salzes trägt wenig zur Verbesserung der Sicherheit bei. Stattdessen iterieren Sie über einen HMAC mit einem zufälligen Salz für etwa 100ms und speichern Sie das Salz mit dem Hash. Verwenden Sie Funktionen wie 'PBKDF2',' Rfc2898DeriveBytes', 'password_hash',' BCrypt' und ähnliche Funktionen. Es geht darum, den Angreifer dazu zu bringen, viel Zeit mit der Suche nach Passwörtern zu verbringen. – zaph

+0

MD5 ist keine Verschlüsselung, es ist ein schwacher kryptographischer Hash. Ein kryptographischer Hash ist eine Einwegfunktion, es ist nicht möglich, die Operation umzukehren. Verschlüsselung ist eine reversible Funktion und hatte einen Schlüssel, der zum Verschlüsseln und Entschlüsseln benötigt wird. – zaph

Antwort

0

Sie können etwas tun:

<?php 
$user_input = $_POST['user']; 
$password_input = md5($_POST['pass']); 

$file = fopen('users.txt', 'r'); 

while(!feof($file)){ 
    $line = fgets($file); 
    list($user, $password) = explode(':', $line); 
    if(trim($user) == $user_input && trim($password) == $password_input){ 
     echo 'Logged in'; 
     break; 
    } 
} 
fclose($file); 

Mit diesem Code wird die Datei Zeile für Zeile von mir gelesen werden, in jeder Zeile Benutzer und Passwort werden von diesem Code erhalten: list($user, $password) = explode(':', $line); und dann wird der Code überprüfen, ob Sie sind gleich der Benutzereingabe. Wenn der Benutzer und das Passwort korrekt sind, erhalten Sie eine Logged in message und die Datei wird geschlossen.

+0

Funktioniert perfekt, wenn der Benutzername und das Passwort korrekt sind, aber wenn der Benutzername oder das Passwort falsch sind, erhalte ich einen Fehler. Wie zeige ich eine Nachricht, dass der Benutzername oder das Passwort falsch ist? – bux

+1

@bux * "Wie zeige ich eine Nachricht, dass der Benutzername oder das Passwort falsch ist?" * Ehrlich gesagt; 'if/else' –

+1

@bux vorausgesetzt, dass Benutzernamen eindeutig sind, können Sie der if innerhalb der while eine elseif-Bedingung hinzufügen:' elseif (trim ($ user) == $ user_input) { echo 'Benutzername/Passwort ist falsch'; Pause; } ' – aperpen

1

Passwörter sollten mit einer nicht reversiblen Sicherheitsmethode gespeichert werden. Wenn ein Passwort gespeichert werden muss, wird es mit nicht umkehrbarer Funktion codiert und gespeichert. Wenn ein Passwort verifiziert werden muss, wird es erneut mit einer nicht reversiblen Funktion codiert und dieses Ergebnis wird mit der gespeicherten Version verglichen.

In PHP ist es einfach, verwenden Sie einfach password_hash bei der Speicherung des Passworts und password_verify bei der Überprüfung eines Passworts. Dies ist eine sehr sichere Methode.

Verwandte Themen