2017-02-13 12 views
1

zu schreiben Ich versuche, einen einfachen POST zu machen, der über Ajax erfolgt. Der Ajax-Aufruf scheint zu funktionieren, kehrt jedoch mit einem Fehler von 500 zurück.Fehler 500 beim Versuch, Formular

Code:

if(isset($_POST['name']) && isset($_POST['password'])) 
{ 
$sql = "SELECT * FROM kandidaat WHERE name = '".$_POST['name']."' AND password = '".$_POST['password']."' LIMIT 1;"; 
$conn= mysqli_connect("localhost", "user", "pw", "db") 
or die(mysqli_error("error connecting to database")); 
$result = $conn->query($sql); 
$resultset = new Array(); 
if ($result->num_rows > 0) { 
    $resultset = $result; 
    session_start(); 
    $_SESSION['login_user']= $_POST['name']; 
} else { 
    $resultset = "0"; 
} 
} 
?> 

Die Verbindung korrekt hergestellt ist, das habe ich vorher getestet.

+2

Sie haben nun Ihre Zugangsdaten zu einem öffentlichen QA Website veröffentlicht und ausgesetzt, sich zu hacken. Haben Sie Ihre Fehlerprotokolle überprüft? –

+1

[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 [vorbereitete] (http://en.wikipedia.org/wiki/Prepared_statement) Anweisungen für [MySQLi] (http://php.net/manual /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! [Glaube es nicht?] (Http: // stackoverflow.com/q/38297105/1011527) –

+1

** 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. –

Antwort

3

In diesem Code sind mehrere Dinge zu beachten.

  1. mysqli_error("error connecting to database") ist falsch, diese Funktion nimmt die Verbindung als ein Argument, keine Zeichenfolge.
  2. sollten Sie mysqli_connect_error() verwenden für die Überprüfung für den Anschluss-Fehler, nicht mysqli_error()
  3. Sie sollten error_reporting(E_ALL); ini_set('display_errors', 1); am Anfang der Datei hinzufügen, so dass Sie die tatsächlichen Fehler finden können.
  4. Sie sollten die Verwendung vorbereiteter Anweisungen in Ihren Abfragen nutzen, insbesondere solche, die PHP-Variablen/Benutzereingaben enthalten.
  5. Sofern Sie eine Array Klasse haben, können Sie nicht initialisieren ein neues Array mit new Array(), aber nur $resultset = array();
  6. Einig geeignet inden machen den Code leichter zu lesen.
  7. Speichern Sie Ihre Kennwörter nicht im Klartext! Dies ist nicht sicher überhaupt! PHP hat eingebaute Funktionen, die Sie verwenden sollten, um das Speichern von Passwörtern zu behandeln, sehen Sie die password_hash() Funktion , die viel sicherer ist!

Mit diesen Verbesserungen, sollte der Code arbeiten - es sei denn, andere Fehler für uns nicht sichtbar sind. In jedem Fall wäre es einfacher herauszufinden, was nicht funktioniert. Sie sollten auch auf, lesen und umzusetzen Punkte 4 und 7.

error_reporting(E_ALL); 
ini_set('display_errors', 1); 
if(isset($_POST['name']) && isset($_POST['password'])) 
{ 
    $sql = "SELECT * FROM kandidaat WHERE name = '".$_POST['name']."' AND password = '".$_POST['password']."' LIMIT 1;"; 
    $conn = mysqli_connect("localhost", "user", "pw", "db") or die(mysqli_connect_error()); 
    if ($result = $conn->query($sql)) { 
     $resultset = array(); 
     if ($result->num_rows > 0) { 
      $resultset = $result; 
      session_start(); 
      $_SESSION['login_user']= $_POST['name']; 
     } else { 
      $resultset = "0"; 
     } 
    } else { 
     echo "Query failed: ".mysqli_error($conn); 
    } 
} 
?> 

Hinweis: Sie sollten keine Fehler auf Ihrer Live-Website angezeigt werden, nur während in der Entwicklung. Fehler können verwendet werden, um Sicherheitslücken zu finden und Ihren Code auszunutzen.

Readingmaterial

Verwandte Themen