nake_api_protectリクエストプロテクタ-リクエストが悪用されないようにする
2231 ワード
github : https://github.com/xjnotxj/wechat_interaction_auth
--
nake_api_protect
一、パラメータ
params
値をとる
デフォルト
コメント
project_name
[string]
"default"
identity
"session"/"ip"
"session"
「ip」はredisで永続化
frequency
下表を参照
制限なし
redis
下表を参照
identity=「ip」の場合は必須
frequency
値のタイプ
たんい
デフォルト
コメント
during
[integer]
秒
0
>=0
times
[integer]
回数
0
>=0
注意:duringとtimesが同時に0の場合、無制限とみなされます.
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
三、呼び出し
四、例-(携帯番号取得)
シナリオ1:
1、ユーザーごとに1分間に1回しか取得できない
シナリオ2:
1、ユーザーごとに1分間に1回しか取得できない
2、ユーザー1時間に3回しか取得できない
--
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),
]