RegistrationRateLimiter
in package
クライアント登録のレート制限
動的クライアント登録は無認証で開いているため、無制限に行を増やせる。 IP 単位で回数を数え、上限を超えた登録を拒否する。
枠はキャッシュの有効期限(1時間)で切れる。登録のたびに書き直すため、 実際には「最後の登録から1時間」で枠がリセットされる。
呼び出し側が渡すクライアント IP は、TRUST_PROXY(config/bootstrap.php 参照)が 有効な場合 X-Forwarded-For ヘッダに依存する。前段プロキシが当該ヘッダを 適切に上書きしない構成では、送信元がヘッダを偽装してこの制限を回避できる。
Table of Contents
Constants
- CACHE_CONFIG : mixed = 'bc_mcp_registration'
- キャッシュ設定名
Methods
- hit() : void
- 登録回数を1つ進める
- isExceeded() : bool
- 上限に達しているかを判定する
- buildKey() : string
- キャッシュキーを組み立てる
- getMaxPerHour() : int
- 1時間あたりの上限件数を取得する
- readCount() : int
- 現在の登録回数を取得する
Constants
CACHE_CONFIG
キャッシュ設定名
public
mixed
CACHE_CONFIG
= 'bc_mcp_registration'
Methods
hit()
登録回数を1つ進める
public
hit(string $clientIp) : void
Parameters
- $clientIp : string
-
クライアントのIPアドレス
isExceeded()
上限に達しているかを判定する
public
isExceeded(string $clientIp) : bool
Parameters
- $clientIp : string
-
クライアントのIPアドレス
Return values
boolbuildKey()
キャッシュキーを組み立てる
private
buildKey(string $clientIp) : string
IP アドレスをそのままキーにすると使用できない文字が混ざるため、 ハッシュ化する。
Parameters
- $clientIp : string
-
クライアントのIPアドレス
Return values
stringgetMaxPerHour()
1時間あたりの上限件数を取得する
private
getMaxPerHour() : int
Return values
intreadCount()
現在の登録回数を取得する
private
readCount(string $clientIp) : int
Parameters
- $clientIp : string
-
クライアントのIPアドレス