2

ユーザーがXMLHttpRequestでデータをPHPに投稿したかどうかを確認する方法は?

これが最善の方法ですか?そうでない場合、どうすればこれを行うことができますか?

私は次のコードを持っています

if(isset($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) === 'xmlhttprequest') {
    // PROBABLY AJAX REQUEST
}

私の質問は、php://input存在し、空でないことを確認するにはどうすればよいですか? 次のコードでうまくいくと思いますが、これが正しい方法であるかどうかを知る必要があります。

if(file_get_contents("php://input") == '') {
    // HAVE NOT POSTED
} else {
    // POSTED
}
4

2 に答える 2

4

カスタム ヘッダーを AJAX 関数の一部として設定し、サーバー側コードにそのヘッダーが存在するかどうかを確認します。

おそらく、これを行う最善の方法は、サーバー側でキーを生成し、それを AJAX 呼び出しを含むクライアント側コードに渡し、AJAX にそれをサーバーに送り返させ、それが有効なキーであることを確認することです。これは、誰かが AJAX リクエストを偽造するのを防ぐ最も効果的な方法です。


php://input存在し、空でないことを確認するには、次を使用します。

$phpinput = file_get_contents("php://input");
// From the docs: "Note: A stream opened with php://input can only be read once"
if( !$phpinput) {
    // phpinput is empty
}
于 2012-04-20T22:00:25.200 に答える
2

スクリプトが で要求されたかどうかを判断できることは 100% 保証されていませんXMLHttpRequest。をチェックすることはできますが_SERVER['HTTP_X_REQUESTED_WITH']、これは、必要なときに設定される、または設定しないときに設定されないという保証はありません。ただし、試してみることはできます。

于 2012-04-20T21:57:24.393 に答える