nake_api_protectリクエストプロテクタ-リクエストが悪用されないようにする

2231 ワード

github : https://github.com/xjnotxj/wechat_interaction_auth
--
nake_api_protect は、周波数+回数の自由な組み合わせに応じてapiが受ける悪意のある要求を制限する.
一、パラメータ
params
値をとる
デフォルト
コメント
project_name
[string]
"default"
identity
"session"/"ip"
"session"
「ip」はredisで永続化
frequency
下表を参照
制限なし
redis
下表を参照
identity=「ip」の場合は必須frequency :
frequency
値のタイプ
たんい
デフォルト
コメント
during
[integer]

0
>=0
times
[integer]
回数
0
>=0
注意:duringとtimesが同時に0の場合、無制限とみなされます.redis :
identity=ipの場合はredisパラメータが必要です
params
値のタイプ
リファレンス値
address
[string]]
"127.0.0.1"
port
[integer]
6379
二、方法
function
機能
戻り値
active
レコードインタフェース要求
void
valid
今回の要求が安全かどうかを判断する
true/false
debug
出力要求記録詳細、便利debug
array
clear
インタフェース要求レコードのクリア回数
void
destory
インタフェースリクエストプロテクタの破棄
void
三、呼び出し
//init nake_api_protect
$nake_api_protect_options = array(
    'project_name' => 'mobile_project',
    'identity' => 'ip',
    'frequency' =>
    [
        array("during" => 1 * 60, 'times' => 3),
    ],
    'redis' => [
        "address" => "127.0.0.1",
        "port" => 6379,
    ],
);

$nake_api_protect = new Nake_api_protect($nake_api_protect_options); //      
 
//use
if (!$nake_api_protect->valid()) {
    echo var_dump($nake_api_protect->debug());
    echo "Your request is too frequent.";
    return;
}
$nake_api_protect->active();
//……


四、例-(携帯番号取得)
シナリオ1:
1、ユーザーごとに1分間に1回しか取得できない
'frequency' => 
[
    array("during" => 60, 'times' => 1), 
]

シナリオ2:
1、ユーザーごとに1分間に1回しか取得できない
2、ユーザー1時間に3回しか取得できない
'frequency' => 
[
    array("during" => 60, 'times' => 1), 
    array("during" => 60 * 60, 'times' => 3), 
]