JavaScriptを使用して大きくて太った醜い文字列を取得し、それをサーバー上の受信者PHPファイルにPOSTして処理するアプリケーションがあります。受信者の仕事は、文字列を解析し、物事を渡し、javascriptにどのようなことが起こっているかを報告することです。最近私はこのシバン全体にパスワードベースのセキュリティを追加しようとしましたが、今はreceiver.phpが空のレスポンスを返します。password_hashまたはpassword_verifyを使用するとPHPの応答テキストが空になる
私が見つけたのは、受信者のどこにいてもパスワードワーキングを呼び出すと(私はそれを使用してもそれを呼び出すことさえできます)スクリプトの次のエコーは実行されません - それらのエコーからのresponseTextは空になります - なぜ私は考えていません。さらに悪いことに、コマンドラインからrawのPHPスクリプトを実行するだけで、すべてが機能します...これにより、かなり髪を引っ張ってしまいます。
私はWeb開発とパスワードベースのセキュリティにはかなり新しいので、私をあまりにも甘やかさないでください。グッドニュース、私はウェブ上で見つけることができる他のすべての問題とは異なり、私は正しいハッシュと正しい検証応答を取得しています。あなたはコメントアウトした場合
<?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";
?>
:
<!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>
そしてreceivertest.php:PHP 5.6.23を使用して
は
Aは、JSファイル "test.htmlという" のバージョンを縮小しましたreceivertest.phpの 'password_verify'行は、すべてが完全にエコーします。もしあなたがいなければ、運がない - test.htmlの 'alert'ウィンドウは 'responseText test123'を吐き出すだけです。しかし、console(php receivertest.php)でreceivertest.phpを実行すると、すべてが正しくエコーされます。
ここで何が起こっているのですか?私のresponseTextはなぜ空ですか?
EDIT:問題をより詳しく説明するために、PHPスクリプトを編集しました。はい、私は何でもpassword_verifyを使用していないことを知っています。それは問題ではありません。 'この行はエコーしません'という行は、他の行と同様にtest.htmlにエコーしません。 私の質問は:なぜではないのですか?
実行中のPHPのバージョンは? 'password_verify'はPHP 5.5で提供されました。 PHP 5.5を実行していない場合、危険なほど古い、サポートされていない、したがって安全でないバージョンのPHPを実行しています。 – ceejayoz
あなたは* password_verifyで何もしていないようです。検証が失敗したとしても、あなたは真であるとエコーしています。 – ceejayoz
[マニュアル、常にそれを確認することをお勧めします](http://php.net/manual/en/function.password-verify.php) – RiggsFolly