2016-04-26 7 views
0

Ok, so habe ich diesen PHP-Code:Ajax anderes Ergebnis als PHP-Serverside bietet

$_you = $_GET['you']; 
$_answer = $_GET['answer']; 
$_pass = md5($_GET['pass']); 
$sql = "select password from users where username='$_you'"; 
$query = mysqli_query($db_conx, $sql); 
while ($row = mysqli_fetch_array($query)) { 
    $_oldpass = $row['password']; 
} 
if ($_pass !== $_oldpass) { 
    $_passresult = "not ok"; 
} else { 
    $_passresult = "ok"; 
} 
$sql2 = "select answer from useroptions where username='$_you'"; 
$query2 = mysqli_query($db_conx, $sql2); 
while ($row2 = mysqli_fetch_array($query2)) { 
    $_veranswer = $row2['answer']; 
} 
if ($_answer !== $_veranswer) { 
    $_answerresult = "not ok"; 
} else { 
    $_answerresult = "ok"; 
} 
$_result = array("Password" =>$_passresult, "Answer" =>$_answerresult); 
header("Content-Type: application/json"); 
echo json_encode($_result); 

?> 

Und dieses Stück (Fragment) von Jquery, die die oben PHP aufruft:

$.get("verifydp.php?u="+you+"&pass="+pass+"&answer="+answer, function(result) { 
    if (result.Password === "not ok") { 
     $('#requiredp').html('<i class="fa fa-exclamation-triangle" aria-hidden="true"></i> Password is not correct'); 
     $('#cpassword').css("border", "solid 1px #f60"); 
     $('#cpassword').focus(); 
     $('#cpassword').val(''); 
     return false; 
    } else { 
     $('#requiredp').html(''); 
     $('#cpassword').css("border", "solid 1px #ccc"); 
    } 
    if (result.Answer === "not ok") { 
     $('#requireda').html('<i class="fa fa-exclamation-triangle" aria-hidden="true"></i> This is not the correct answer.'); 
     $('#answer').css("border", "solid 1px #f60"); 
     $('#answer').focus(); 
     $('#answer').val(''); 
     return false; 
    } else { 
     $('#requireda').html(''); 
     $('#answer').css("border", "solid 1px #ccc"); 
    } 
}); 

Wie Sie vielleicht Ich habe es erraten, das ist ein kleines Passwort-Verifizierungs-Ding, das ich gemacht habe, es ist noch nicht fertig, also erwähne nicht die Tatsache, dass es noch nicht 100 Prozent sicher ist. Ich wollte nur Ihre Hilfe in dem folgenden bemerkenswerten Problem, dass ich mit der Interaktion zwischen diesen beiden Teilen des Codes bekomme:

Es ist die Überprüfung richtig oder falsch Passwörter und Antworten, aber wenn ich das richtige Passwort eingeben, schlägt es mich zurück sagen, das Passwort ist nicht korrekt. Das Lustige ist jedoch, dass wenn ich den PHP-Teil selbst mit den gleichen Daten laufen lasse, er mir sagt, dass das Passwort korrekt ist. Also die PHP-Feeds ein "OK" zu Ajax und Ajax irgendwie verwandelt es in ein "NOT OK", die dann die entsprechenden Chaos in den Rest der Skript-Aktionen verursacht. Hat jemand eine Idee, warum das passiert? Jede Hilfe wird sehr geschätzt, da es meinen Kopf in: -/ Wenn Sie weitere Informationen benötigen, lassen Sie es mich wissen.

Danke eine Million!

+0

Vielen Dank für Ihren Kommentar - aber selbst wenn die Antwort Teil fehlerhaft ist, würde es immer noch den Password Abschnitt behandeln und dann einfach aufhören, wenn Sie auf die Antwort kommen? Oder sogar ganz aufhören? Edit: der PHP gibt die richtigen Antworten - zB: wenn ich es direkt ausführe sagt es {Passwort: ok, Antwort: ok} noch habe ich die Ajax Antwort alarmiert und die Warnung sagt "Nicht OK" unter Passwort. –

+0

[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-Injektion-in-php). Sogar [die Zeichenfolge zu entkommen] (http://stackoverflow.com/questions/5741187/sql-injection-that-gets-around-mysql-real-escape-string) ist nicht sicher! –

+0

Sie sollten [MD5 Passwort-Hashes] (http://security.stackexchange.com/questions/19906/is-md5-considered-insecure) wirklich nicht verwenden und Sie sollten wirklich PHP [eingebaute Funktionen] verwenden (http: //jayblanchard.net/proper_password_hashing_with_PHP.html), um die Passwortsicherheit zu handhaben. 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. –

Antwort

4

Ich werde nur ignorieren, wie unsicher das ist, nur weil du gesagt hast.

Also, weitergehen. Ajax manipuliert Daten in keiner Weise. Ajax ist nur ein "Weg" für Ihre Webseite, um asynchron auf den Webserver zuzugreifen und einige Daten zu erhalten.

Der Grund, warum dies nicht funktioniert und das Passwort ist immer „nicht in Ordnung“ ist, weil Ihr PHP den Benutzernamen erwartet in GET-Parameter zu sein Sie, aber Sie es in GET-Parameter u senden.

+1

Sie müssen mich verarschen - ich muss das völlig übersehen haben, wie dumm von mir - nur um zu zeigen, dass es die kleinen Dinge sind, die töten, nicht die großen :) Wie auch immer, für die Sicherheit - natürlich ist das alles werde saniert werden und alles, aber da dies noch nicht fertig ist, wollte ich es einfach aus der Gleichung lassen. Tausend Dank dafür! –

Verwandte Themen