nake_api_protect 请求保护器——防止请求被恶意刷

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、每个用户每分钟只能获取一次

'frequency' => 
[
    array("during" => 60, 'times' => 1), 
]
方案2:

1、每个用户每分钟只能获取一次

2、每个用户每小时只能获取三次

'frequency' => 
[
    array("during" => 60, 'times' => 1), 
    array("during" => 60 * 60, 'times' => 3), 
]
原文地址:https://www.cnblogs.com/xjnotxj/p/9064616.html