私はモデルビューコントローラWebアプリケーションを構築していますが、リクエストスパムメカニズムを構築したいのですが、なぜですか?PHPリクエストスパム防止メカニズム
私たちはajaxコントローラを手に入れました。すべてのユーザー入力はajaxを通じて受信されます。私のWebアプリケーションで直接$ _POSTは実行されません。
のは、我々は上のスパム防止機構を配置するAjaxのコントローラのいくつかのアクションを想像してみましょう:
class AjaxController{
private function setPrevention($interval){
$latestActionRequest = $_SESSION['requests'][$this->action];
if($prevention === null){
$_SESSION['requests'][$this->action] = array('latest' => microtime(), 'interval' => $interval
} else {
// Calc difference here, and check if the interval was within range, else
// the user was requesting the action method to quickly.
}
}
public function _postComment(){
$this->setPrevention(1000);
// Apply validation, on the $_POST array, insert the to database.
}
}
だから我々は、コメントを投稿するアクションを持って、我々は唯一のユーザーが投稿できるようにしたいです毎秒コメントがありますので、セッションでは非常に基本的な予防策を適用しています。
setPreventionメソッドのコメントを確認してください。私は2つの質問がある、私の最初の質問は、このメカニズムは良いアイデアですか?または、これを構築するための代替方法がありますか?
2番目の質問は、最新のリクエストがインターバルの範囲内にあったかどうかを確認する方法です。 microtime - microtimeでは秒差がありますが、500ms間隔を適用するアクションがあります。ある
$_SESSION['requests']['postComment'] = array('latest' => microtime(true), 'interval' => 1000);
$difference = ($_SESSION['requests']['postComment'] - microtime(true));
この時点で$差がフロートをバック与えます(106.984388113)(106秒を待っていた) しかし、私たちの間隔が1000であるので、我々は、微小時間差を取得したい(:私は今のところ得たもの
1秒ではなく1000秒)
私の質問がはっきりしたことを願っています。
あなたの編集に対する私の答えを改訂しました。 – Chris