2016-04-26 3 views
-2

ich den folgenden Code haben, aber ich kann nicht den Benutzer erhalten auf ihr Konto anmelden, in der Datenbank die Länge des Passworts als gespeichert ist 35. Ich habe var_dump die Passwortvariable, um zu sehen, was in sie eingefügt wird und den gleichen Wert wie das in der Datenbank gespeicherte Passwort. Jede Hilfe, schätzen eskann nicht mit md5 php Rechnung log

<?php 
    include_once("config.php"); 
    session_start(); 
    $message = ""; 

    if (isset($_POST['username'])) {  
     $username = ($_POST['username']); 
     $password =md5($_POST['password']); 
     $password = ($password); 

     $sql = "SELECT * FROM user WHERE username = '$username' && password='$password'"; 
     $query = mysqli_query($conn, $sql); 
     $row = mysqli_fetch_row($query); 
     $userid = $row[0]; 
     $checkuser = $row[5]; 
     $checkpassword = $row[4]; 
     $type = $row[1]; 
     $name = $row[2]; 
     $surname = $row[3]; 

     if ($username != $checkuser || $password != $checkpassword) { 
      $message = " username or password entered is incorrect."; 
     } 

     if ($username == $checkuser && $password == $checkpassword) { 
      $_SESSION['username'] = $username; 
      $_SESSION['type'] =$type; 
      $_SESSION['name'] = $name; 
      $_SESSION['surname'] = $surname; 
      $_SESSION['userid'] = $userid; 

      if($_SESSION['type'] == "admin") { 
       header("Location: adminindex.php"); 
      } else { 
       header("Location: index.php"); 
      } 

     } 
    } 
?> 
+1

Warum sind Sie die Werte so viele Male zu vergleichen? Welcher Vergleich ist der, der versagt? – David

+3

Bitte verwenden Sie PHP [eingebaute Funktionen] (http://jayblanchard.net/proper_password_hashing_with_PHP.html) Passwortschutz 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 [Passwörter nicht umgehen] (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. –

+1

[Kleine Bobby] (http://bobby-tables.com/) sagt, [Ihr Skript ist für SQL-Injection-Angriffe gefährdet.] (Http://stackoverflow.com/questions/60174/how-can-i-prevent -sql-Injektion-in-php) Erfahren Sie mehr über [vorbereitet] (http://en.wikipedia.org/wiki/Prepared_statement) Erklärungen 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! –

Antwort

1

Es kann oder auch nicht ein Problem mit der Tatsache sein, dass Sie nicht mit Prepared Statements, aber Sie verlassen auf jeden Fall, sich offen für SQL-Injection.

vorbereitete Anweisung Beispiel:

$stmt = $conn->prepare("SELECT * FROM user WHERE username =? AND password=?"); 
$stmt->bind_param("ss", $username, $password); 
$stmt->execute(); 

See: http://php.net/manual/en/mysqli.prepare.php

+1

nicht nach [dazu] (http://dev.mysql.com/doc/refman/5.7/en/logical-operators.html). –

+0

coolness ....... –

+1

Also, damit entfernt Ihr Code nicht beantwortet das OP. –