2016-07-12 7 views
0

Ich habe eine Anwendung, die Javascript verwendet, um eine große, fette, hässliche Zeichenfolge und POST es zu einem Empfänger php-Datei auf dem Server für die weitere Verarbeitung. Die Aufgabe des Empfängers besteht darin, die Zeichenkette zu analysieren, Dinge weiterzugeben und Javascript zu melden, wie es läuft. Vor kurzem habe ich versucht, diesem ganzen Shebang Passwort-basierte Sicherheit hinzuzufügen, aber receiver.php gibt jetzt eine leere Antwort zurück.PHP Antwort Text leer bei der Verwendung von password_hash oder password_verify

Was ich finde ist, dass, wenn ich irgendwo im Empfänger password_verify aufrufen (egal was ich damit mache ... ich könnte es auch nur aufrufen, ohne es zu benutzen) die folgenden Echos im Skript laufen nicht - Jede Antwort von diesen Echos ist leer - und ich habe keine Ahnung warum. Was noch schlimmer ist, wenn ich das PHP-Skript einfach nur von der Befehlszeile aus ausführen lasse, funktioniert alles ... was dieses haarige Haar-Ziehen ausmacht.

Bevor ich fortfahre, würde ich bemerken, dass ich ziemlich neu in der Web-Entwicklung und Passwort-basierte Sicherheit bin, also spieß mich nicht zu hart. Gute Neuigkeiten, obwohl ich anders als jedes andere Problem, das ich im Internet finde, korrekte Hashes und korrekte Verifizierungs-Antworten bekomme.

mit PHP 5.6.23

Eine abgespeckte Version der JS-Datei "test.html":

<!doctype html> 
<html lang="en"> 
<head> 
<script type="text/javascript"> 
     function reviewAndSubmit() { 
      //bigOlString is usually built as a result of TONS of script on this page, use this as a test 
      var bigOlString = "password=1234 name=test otherParams=barglebargle" 
      var postString = new XMLHttpRequest(); 

      //build function to receive post response 
      postString.onreadystatechange = function() { 
       if (postString.readyState == 4) { 
        window.alert("responseText: " + postString.responseText) 
       } 
      } 

      postString.open("POST", "receivertest.php", true); 
      postString.setRequestHeader("Content-Type", "text/plain;charset=UTF-8"); 
      postString.send(bigOlString); 
     } 


</script> 
</head> 
<body> 
<button class="button" id="pushMe" onClick="reviewAndSubmit()">Why does PHP hate me so bad?</button> 

Und receivertest.php:

<?php 

//hashed version of '1234' and debug name 'test' 
$debugPass = '$2y$10$b.08/4NfawKOwrBYJqguc.AWsI3mQiGGaz1eYvfc9Uid1auQKKABm'; 
$debugName = 'test'; 

//get incoming string 
$inString = file_get_contents('php://input'); 

//get challenge content 
$challengePass = substr($inString, strpos($inString, "password=") + 9, strpos($inString, "name=") - 10); //10 because of the space 
$name = substr($inString, strpos($inString, "name=") +5, (strpos($inString, "otherParams=") - strpos($inString, "name=") - 6)); //ugly! 

//begin authentication 
$auth = False; 
echo $name; 
echo $challengePass; 


password_verify($challengePass, $debugPass); //yes, I'm not doing anything with this. Doesn't matter. 
echo "this line won't echo"; 
?> 

Wenn Sie auf Kommentar die 'password_verify' Zeile in receirtert.php, alles stimmt perfekt. Wenn nicht, kein Glück - das 'alert' Fenster in test.html spuckt nur 'responseText test123' aus. Wenn Sie in der Konsole (php recarrert.php) die Datei "recurdertest.php" ausführen, wird alles korrekt wiedergegeben.

Was zum Teufel geht hier vor? Warum ist mein Antworttext leer?

EDIT: Ich habe das PHP-Skript bearbeitet, um das Problem besser zu veranschaulichen. Ja, ich weiß, dass ich password_verify für nichts BENUTZT habe. Es ist egal. Die Zeile "Diese Zeile wird nicht echo" wird in test.html nicht wie die anderen Zeilen ausgegeben. Meine Frage ist: warum nicht?

+0

Welche PHP-Version verwenden Sie? 'password_verify' kam in PHP 5.5. Wenn Sie PHP 5.5 nicht ausführen, führen Sie eine gefährlich alte, nicht unterstützte und daher unsichere Version von PHP aus. – ceejayoz

+2

Sie scheinen auch nichts mit * 'password_verify' zu tun. Sie echoten "wahr", selbst wenn die Überprüfung fehlschlägt. – ceejayoz

+0

[Das Handbuch, immer eine gute Idee, um es zu überprüfen] (http://php.net/manual/en/function.password-verify.php) – RiggsFolly

Antwort

0

Der Code ist alles in Ordnung. Ich habe einen schnellen Schnitt in meiner Datei httpd.conf gemacht und Apache neu gestartet, und alles hat angefangen zu arbeiten. Ich habe diese Änderung rückgängig gemacht, um sie zu überprüfen und neu zu starten - alles funktionierte noch. Ich denke, alles, was ich brauchte, war ein Apache-Neustart.

Apache scheint mehr mit PHP zu tun zu haben, als ich dachte, denke ich?

Verwandte Themen