2016-09-27 8 views
1

あたり2つの要求を制限するためにどのように私は反洪水の機能を持っている、PHP - Antiflood - ユーザーが1秒間に1つの以上の要求を要求した場合、2番目の

if (!isset($_SESSION)) { 
    session_start(); 
} 

if($_SESSION['last_session_request'] > time() - 1){ 
die(); 
} 

$_SESSION['last_session_request'] = time(); 

、スクリプト自体を停止します。私がやりたいことは、1秒間に最大2リクエスト(1ではなく)を許可する必要があるということです。 どうすればいいですか?しかし、

<? 
$time_interval = 1;#In seconds 
$max_requests = 2; 
$fast_request_check = ($_SESSION['last_session_request'] > time() - $time_interval); 

if (!isset($_SESSION)) 
{ 
    # This is fresh session, initialize session and its variables 
    session_start(); 
    $_SESSION['last_session_request'] = time(); 
    $_SESSION['request_cnt'] = 1; 
} 
elseif($fast_request_check && ($_SESSION['request_cnt'] < $max_requests)) 
{ 
    # This is fast, consecutive request, but meets max requests limit 
    $_SESSION['request_cnt']++; 
} 
elseif($fast_request_check) 
{ 
    # This is fast, consecutive request, and exceeds max requests limit - kill it 
    die(); 
} 
else 
{ 
    # This request is not fast, so reset session variables 
    $_SESSION['last_session_request'] = time(); 
    $_SESSION['request_cnt'] = 1; 
} 

一つのこと - あなたは事のこの王をやろうとしている場合には、DDoS攻撃からあなたを保護しません。

答えて

1

私は、このようにそれを行うだろう。 PHPのセッションは簡単に削除することができ、そうでない場合でも、1つのクライアントから複数のセッションを作成できます。 Read this discussion保護の詳細について知りたい場合。

+0

偉大なアプローチ、ありがとうございます。 –

+1

問題はありません、あなたの参照に追加のコメントを追加しました。 –

+0

DoSに実際に結びついている人はセッションを保存/再利用しないので、たぶんリクエストごとに新しいセッションが作成されます – hanshenrik

関連する問題