着信POSTリクエストがcURLを介してプログラムによって開始されたかどうか、または通常のHTML POSTリクエストであるかどうかを判別する方法はありますか?PHPのcURL POSTリクエストと通常のPOSTリクエストの区別
私は特定の条件を設定できるように、PHPの2つを区別できますか?
着信POSTリクエストがcURLを介してプログラムによって開始されたかどうか、または通常のHTML POSTリクエストであるかどうかを判別する方法はありますか?PHPのcURL POSTリクエストと通常のPOSTリクエストの区別
私は特定の条件を設定できるように、PHPの2つを区別できますか?
もしあなたがlibcurl
を意味するのであれば、答えはいいと思うのですが、それはデフォルトでは識別情報を追加しません。
もしあなたがcurl
を意味するなら、それは簡単です。デフォルトのユーザーエージェントは、正規表現でも多分あなたは0===strpos('curl/',$_SERVER['HTTP_USER_AGENT']??'')
興味深いノートでは、カールはJavaScriptを実行しないことであるだけで行うことができ、やり過ぎかもしれ
if(1===preg_match('/^curl\/[\.\d]+/',$_SERVER['HTTP_USER_AGENT']??'')){
//curl's user-agent string. probably curl
} else {
//could be anything (including curl, perhaps with a masked user-agent)
}
(今そのcurl/7.52.1
私のシステム上の)カール/ versionumberですので、javascriptで(隠し?)入力タグを追加すると、curlはそれを無視します。以下のようなjsInputTag=document.createElement("input");jsInputTag.setAttribute("name","jsInputTag");document.getElementById("form").appendChild(jsInputTag);
カールは(何もかかわらず、それを手動で追加することからプログラマを停止しません。)フォームに
をjsInputTagを追加しませんが、その後、再び、多くの被害妄想の人はどちらか自分のブラウザでJavaScriptを実行しないと、ほとんどのブラウザにはオフにする方法があります。
ちなみにX-Y問題なら本当に必要なのは自動化されたスクリプトからの保護で、カールを検出しようとするのではなく、キャプチャを使うべきです。 ReCaptcha
「標準」を定義してください。 – CBroe
サーバからのcURL経由で送信されるのではなく、クライアントブラウザによって開始されたPOST要求ですか? – Mirian
どちらか一方については「正常でない」ものは何もありません。そして、cURL経由で誰かがブラウザと同じ要求ヘッダーを送信した場合、2つの間で識別できる方法はありません(それらが_identical_であるため)。ほとんどの場合、ブラウザが送信する典型的なヘッダ/値(User-Agent、Accept-...ヘッダなど)を確認し、実際のブラウザを扱っている場合はその試行と推測(!)に基づいて確認できますか否か。 – CBroe