2017-05-30 2 views
0

Ich habe ein paar Methoden ausprobiert, ich habe bestätigt, dass es ein spezielles Charakterproblem ist, dh. Ich versuchte eine einfache Passwortkombination, die nur Buchstaben/Zahlen enthielt und das funktionierte.Was ist der richtige Weg, um ein Passwort über JavaScript AJAX zu PHP zu senden?

Seit ich mit jQuery aufgehört habe, ist dies das erste Mal, dass ich ein Problem hatte, wo password_verify nicht funktionieren würde. Ich habe sichergestellt, dass, wie ich oben erwähnt habe, mit password_verify nichts falsch war.

So bekomme ich mein Passwort-Eingabe und ich verbinden es mit dem Benutzernamen wie folgt aus:

var params = null, 
    paramObj = {}; 
paramObj['user'] = loginInpUser.value; 
paramObj['pass'] = loginInpPass.value; 
params = encodeURI('post_params='+JSON.stringify(paramObj)); 

Auf der PHP-Seite ich dies wie so in POST erhalten:

$post_params = json_decode($_POST['post_params'], true); 
$user = $post_params['user']; 
$pass = $post_params['pass']; 

ich sicher machte Ich bekomme passende Werte von dem, was ich auf der Client-Seite sende, zu dem, was PHP bekommt, dh. $ User Echo und $ passieren, sie passen genau ... die Sonderzeichen in Frage sind:

)(#$$%)(

Ich habe nicht einmal in einem & dort zu werfen versucht, die Probleme mit verursachen können, wie Sie die verketten Parameter vor dem Senden mit einer XMLHttpRequest.

Also was ist der richtige Weg, dies zu tun, wo Sonderzeichen noch korrekt geparst werden (password_verify stimmt mit Hash mit Passwort überein)?

Es gibt einen Grund, keine jQuery für mich zu verwenden, um die Downloadgeschwindigkeit der Datei zu senken - verwenden Sie asynchrone Tags.

Edit:

Seltsame mit Hashes:

Ich brauchte nur ein einfaches Login-System, so dass ich nicht mit einem Register Form stören, ich habe eine Hash-Funktion erstellt, die password_hash verwendet und steckte ihn in ein db. Ich bemerkte, dass

$pass = "password with special chars"; 

Würde nicht verwenden, würde der Fehler sagen, dass etwas in der Zeichenfolge war eine nicht definierte Variable (string ist zerschneiden, ich denke, ein Parsing-Fehler).

Aber

$pass = 'password with special chars'; 

mit diesem war in Ordnung.

+0

https: //developer.mozilla.org/de-DE/docs/Web/JavaScript/Referenz/Global_Objects/encodeURI "Beachten Sie, dass encodeURI selbst keine richtigen HTTP-GET- und POST-Anfragen erstellen kann, z. B. für XMLHTTPRequests, weil" & "," + "und" = " sind nicht codiert, die in GET- und POST-Anfragen als Sonderzeichen behandelt werden. encodeURIComponent kodiert diese Zeichen jedoch. " – ceejayoz

+0

Randnotiz: Das ist ein seltsamer Grund, jQuery nicht zu verwenden. Sie könnten eine andere, kleinere Bibliothek wie Axios verwenden - es ist dumm, Ihre eigenen XMLHTTPRequests zu erstellen. – ceejayoz

+0

Ich habe das auch versucht, encodeURIComponent, danke für den Link, den ich überprüfen werde. Es gibt auch die Frage, ob ich dann URL-Code auf der PHP-Seite mit einem dieser Fälle verwenden. Ich denke nicht für den ersten Fall (mit Urlencode). – subalublub

Antwort

0

Sie sollten entweder die gesamte Anfrage als JSON senden, oder URL-codiert; eine Mischung aus beidem ist ziemlich seltsam:

var params = 'user=' + encodeURIComponent(loginInpUser.value) + '&pass=' + encodeURIComponent(loginInpPass.value); 
$user = $_POST['user']; 
$pass = $_POST['pass']; 

Oder:

var params = JSON.stringify({ user: loginInpUser.value, pass: loginInpPass.value }) 
$params = json_decode(file_get_contents('php://input'), true); 
echo $params['user'], $params['pass']; 

Diese richtig richtig willkürlich "spezielle" Zeichen bewahrt.

+0

Danke zu verwenden. Ich habe es endlich geschafft zu arbeiten. Ich habe die zweite Version benutzt. – subalublub

+0

Ich wollte aus irgendeinem Grund erwähnen, wenn ich Hashes erzeuge, wenn ich $ pass gleich einer Zeichenkette mit doppelten Anführungszeichen auf PHP-Seite gesetzt habe, schlägt es fehl, aber unter Verwendung von einfachen Anführungszeichen und Hash/Speichern in db stimmt das Passwort überein Ich weiß nicht was los ist. Ich füge es meiner Frage für jeden hinzu, der dieses Problem als eine mögliche Sache zu überprüfen hat. – subalublub

Verwandte Themen