yii 2 restful webサービス[レート制限]

2561 ワード

そくどせいげん
乱用を防ぐためには、APIに増加速度を制限することを考慮する必要があります.たとえば、各ユーザのAPIの使用を10分以内に最大100回のAPI呼び出しに制限できます.1人のユーザが同じ期間内に多くの要求を受信すると、応答状態コード429が返される(これは、過剰な要求を意味する).
レート制限を有効にするには、[[yiiwebUser::identityClass|user identity class]]を実装すべきである[[yiifiltersRateLimitInterface]].このインタフェースには、次の3つの方法が必要です.getRateLimit():許可された要求の最大数および時間を返し、例えば、[100, 600]は、600秒以内に最大100回のAPI呼び出しを表す. loadAllowance():残りの許可された要求と対応するUNIXタイムスタンプの数が最後のレート制限チェック時に返される. saveAllowance():残りのリクエスト数と現在のUNIXタイムスタンプを保存します.
許容差とタイムスタンプ情報を記録するには、userテーブルで2つの列を使用します.loadAllowance()およびsaveAllowance()は、現在の認証に適合するユーザの2つのカラム値の読み取りおよび保存を実現することによって実行することができる.パフォーマンスを向上させるには、キャッシュまたはNoSQLを使用してこれらの情報を格納することも考えられます.
必要なインタフェースをidentityで実装すると、Yiiは自動的に[[yiifiltersRateLimiter]]を[[yiirestController]]に動作フィルタを構成してレート制限チェックを実行します.速度制限を超えた場合、速度制限器は[[yiiwebTooManyRequestsHttpException]]を放出します.RESTコントローラクラスで速度制限を設定できます
public function behaviors()
{
    $behaviors = parent::behaviors();
    $behaviors['rateLimiter']['enableRateLimitHeaders'] = false;
    return $behaviors;
}

レート制限がアクティブ化されると、デフォルトでは、各応答には、以下のHTTPヘアが現在のレート制限情報を送信します.X-Rate-Limit-Limit:同じ期間に許可された要求の最大数. X-Rate-Limit-Remaining:現在の期間内に残った要求の数. X-Rate-Limit-Reset:最大要求数を得るために待機する秒数.
これらのヘッダ情報を無効にするには、上記のコード例に示すように[yiifiltersRateLimiter::enableRateLimitHeaders]]をfalseに設定します.