不正の分野では、これらは速度制御と呼ばれ、交通管理では「交通シェーピング」に似ています。基本的に、期間ごとに制限された使用を許可しているため、たとえば、10リクエスト/分/IPアドレスのみを許可する場合があります。
'request'ごとに、リモートアドレスを決定します(Cではgetpeername())。この関数は常にリモートユーザーのIPアドレスになります。次に、期間ごとにリクエストがどのように処理されるかを数え、制限を超えた場合は何でもします。擬似コードで
Get block for remote ip
If time-now is new window, then reset usage to zero
Add one to usage count
If usage > allowance then .....
Else if usage > allowance*0.75 then slow-down
Else ok
単一の期間を示しましたが、ほとんどの実装は通常、1時間ごとに毎分など、複数の期間にわたって平均化されます。バーストを許可し、持続的な負荷のみを制限する傾向がありますが、これは許可するプロファイルによって異なります。
これがAPIの場合、ハードエラーを提供するのではなく、単にリクエストの速度を落とすのが普通です。もう一方の端のクライアントがエラーを処理するという保証はありません。ユーザー画面の場合は、超過した制限を表示できます。
もちろん、IPアドレス、参照、ブラウザタイプ、pageurl、cookieなど、任意のサイズで制限できます。getpeernameを使用している場合、複数の同時ユーザーが共通のプライベートルーターの背後にいると、すべて同じリモートIPアドレスを持つ可能性があることに注意してください。