2016-12-13 9 views
-2

Hier habe ich einige PHP-Code, der mir erlaubt, Benutzerinformationen in meiner Schüler-Tabelle zu aktualisieren.Passwort Verifikation PHP Formular

Ich versuche, herauszufinden, wie bin ich in der Lage zu überprüfen, ob das Passwort für den Benutzer, die derzeit in das Passwort in der Datenbank gespeicherten übereinstimmt angemeldet ist, bevor Informationen ermöglicht aktualisiert werden kann.

+6

** Speichern Sie niemals Nur-Text-Passwörter! ** Bitte verwenden Sie PHP [integrierte Funktionen] (http://jayblanchard.net/proper_password_hashing_with_PHP.html), um die Passwortsicherheit zu behandeln. Wenn Sie eine PHP-Version kleiner als 5.5 verwenden, können Sie das 'password_hash()' [compatibility pack] (https://github.com/ircmaxell/password_compat) verwenden. Stellen Sie sicher, dass Sie *** [Kennwörter nicht entgehen] (http://Stackoverflow.com/q/36628418/1011527) *** oder verwenden Sie einen anderen Bereinigungsmechanismus vor dem Hashing. Wenn Sie dies tun, * ändert * das Passwort und verursacht unnötige zusätzliche Codierung. –

+2

[Little Bobby] (http://bobby-tables.com/) sagt *** [Ihr Skript ist für SQL Injection Attacks gefährdet.] (http://stackoverflow.com/questions/60174/how-can-i-prevent-sql-injection-in-php) *** Erfahren Sie mehr über [vorbereitet] (http://en.wikipedia.org/wiki/Prepared_statement) Anweisungen für [MySQLi] (http://php.net/manual/en/mysqli.quickstart.prepared-statements.php). Sogar [die Zeichenfolge zu entkommen] (http://stackoverflow.com/questions/5741187/sql-injection-that-gets-around-mysql-real-escape-string) ist nicht sicher! [Glauben Sie es nicht?] (Http://stackoverflow.com/q/38297105/1011527) –

Antwort

0

Wie die anderen sagen, Ihr Skript hat Bündel von Löchern.

Ich nehme an, Sie für lokale entwickeln nur.

, wenn Sie es in diesem Stadium hosten, sicher werden Sie Sicherheitsprobleme bekommen.

Okay, zurück zu Ihrer Frage.

Es gibt mehrere Möglichkeiten, Benutzer zu validieren, bevor Update zu begehen.

Zum Beispiel:

  1. Put SQL-Zustand, wenn die Änderung der Aktualisierung

    if(isset($_POST['Update'])){ 
        $UpdateFName = $_POST['FirstName']; 
        $UpdateLName = $_POST['LastName'];   
        $UpdateEmail = $_POST['Email']; 
        $UpdateFPassword = $_POST['Password']; 
    
        $SQL = $conn->query("UPDATE students 
        SET FName='{$UpdateFName}',LName='{$UpdateLName}',Email='{$UpdateEmail}',Password='{$UpdateFPassword}' 
        WHERE UserID = $User and Password = '$_SESSION["PW"]' "); 
    
    header('Location:updateinfo.php'); 
    

    }

, wenn Sie diese Methode verwenden, wenn Sie das aktuelle Passwort mit Passwort unterscheidet Diese edit sql wird nicht ausgeführt, da die Bedingung ungültig ist

  1. den Benutzer zuerst validieren.

    if(isset($_POST['Update'])){ 
        $UpdateFName = $_POST['FirstName']; 
        $UpdateLName = $_POST['LastName'];   
        $UpdateEmail = $_POST['Email']; 
        $UpdateFPassword = $_POST['Password']; 
    
        $sqlValidate = $conn->query("SELECT * FROM students WHERE UserID ='$User' and Password='$_SESSION["PW"]' "); 
        $getUser = $sqlValidate -> fetch_array(MYSQLI_BOTH); 
    
        if($getUser['UserID'] != ''){ 
         $SQL = $conn->query("UPDATE students SET FName='{$UpdateFName}', LName='{$UpdateLName}', Email='{$UpdateEmail}', Password ='{$UpdateFPassword}' WHERE UserID = $User "); 
        }// end if 
    
    header('Location:updateinfo.php'); 
    

    }

können Sie http://php.net/manual/en/function.crypt.php für Passwort-Verschlüsselung lesen.

+0

Ja, das ist nur zu Demonstrationszwecken und nicht live gehostet werden. Vielen Dank für Sie sind Code jedoch bekomme ich diese Fehler: unerwartete '' ', erwartet Identifier (T_STRING) oder Variable (T_VARIABLE) oder Nummer (T_NUM_STRING) Nach der Behebung dieses Fehlers, bekomme ich diese Parse Fehler, Syntax Fehler, unerwarteter '$ _SESSION' (T_VARIABLE) und ich bin mir nicht sicher, was ich verpasst habe –

+0

es bedeutet, dass die Saison-Variable fehlt, stellen Sie sicher, dass Sie die Sitzung Variable für das Passwort oben deklarieren – Windy

0

Ihr Formular hat im Grunde keine Validierungen. Außerdem gibt es Möglichkeiten für SQL-Injektionen. validieren Sie Ihr E-Mail-Feld, bevor Sie es posten. versuchen Sie:

if(!filter_var($email_variable,FILTER_VALIDATE_EMAIL){ 
//throw some kind of exceptions or kill the process 
} 

Ich rate auch, dass Sie PDO verwenden, da es die Verwendung von vorbereiteten Anweisungen unterstützt. Es gibt eine erstaunliche Funktion dort kann bindParam(), die Ihre Parameter bindet.

Händler:

$DBH = new PDO("mysql:host=localhost;dbname=test", 'root', ''); 
     $DBH->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
     $STH = $DBH->prepare("SELECT * FROM student_table WHERE studentID= :id"); 
     $id = 1; // here you should keep it as variable and pass it to param 
     $STH->bindParam(':id', $id, PDO::PARAM_STR); 
     $STH->execute(); 

     $STH->setFetchMode(PDO::FETCH_ASSOC); 

Auch schreiben Sie keine rohen Passwörter direkt in Ihre Datenbank. Verwenden Sie entweder den integrierten PHP-Hashing-Algorithmus oder verwenden Sie eine Art Verschlüsselungsfunktion, um sie zu sichern.