2017-02-06 11 views
0

着信POSTリクエストがcURLを介してプログラムによって開始されたかどうか、または通常のHTML POSTリクエストであるかどうかを判別する方法はありますか?PHPのcURL POSTリクエストと通常のPOSTリクエストの区別

私は特定の条件を設定できるように、PHPの2つを区別できますか?

+0

「標準」を定義してください。 – CBroe

+0

サーバからのcURL経由で送信されるのではなく、クライアントブラウザによって開始されたPOST要求ですか? – Mirian

+0

どちらか一方については「正常でない」ものは何もありません。そして、cURL経由で誰かがブラウザと同じ要求ヘッダーを送信した場合、2つの間で識別できる方法はありません(それらが_identical_であるため)。ほとんどの場合、ブラウザが送信する典型的なヘッダ/値(User-Agent、Accept-...ヘッダなど)を確認し、実際のブラウザを扱っている場合はその試行と推測(!)に基づいて確認できますか否か。 – CBroe

答えて

0

もしあなたが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