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),
]

nake_api_protect 请求保护器——防止请求被恶意刷的更多相关文章

  1. 第106天:Ajax中同步请求和异步请求

    同步请求和异步请求的区别 1.同步是指:发送方发出数据后,等接收方发回响应以后才发下一个数据包的通讯方式. 用户填写所有信息后,提交给服务器,等待服务器的回应(检验数据),是一次性的.信息错误又要重新 ...

  2. ASP.NET Core应用针对静态文件请求的处理[2]: 条件请求与区间请求

    通过调用ApplicationBuilder的扩展方法UseStaticFiles注册的StaticFileMiddleware中间件帮助我们处理针对文件的请求.对于StaticFileMiddlew ...

  3. Java Web中请求转发和请求包含

    1.都是在一个请求中跨越多个Servlet 2.多个Servlet在一个请求中,他们共享request对象.就是在AServle中setAttribute()保存数据在BServlet中由getAtt ...

  4. Ajax中Get请求与Post请求的区别

    Get请求和Post请求的区别 1.使用Get请求时,参数在URL中显示,而使用Post方式,则不会显示出来 2.使用Get请求发送数据量小,Post请求发送数据量大 例子 页面的HTML代码: &l ...

  5. WebApi系列~基于单请求封装多请求的设计

    回到目录 怎么说,单请求封装多请求,这句话确实有点绕了,但还是要看清楚,想明白这到底是怎么一回事,单请求即一次请求(get,post,put,delete),封闭多请求,即在客户端发送的一个请求中可能 ...

  6. 详细解读XMLHttpRequest(一)同步请求和异步请求

    本文主要参考:MDN XMLHttpRequest 让发送一个HTTP请求变得非常容易.你只需要简单的创建一个请求对象实例,打开一个URL,然后发送这个请求.当传输完毕后,结果的HTTP状态以及返回的 ...

  7. 【读书笔记】iOS网络-同步请求,队列式异步请求,异步请求的区别

    一,同步请求的最佳实践. 1,只在后台过程中使用同步请求,除非确定访问的是本地文件资源,否则请不要在主线程上使用. 2,只有在知道返回的数据不会超出应用的内存时才使用同步请求.记住,整个响应体都会位于 ...

  8. iOS开发——网络篇——文件下载(NSMutableData、NSFileHandle、NSOutputStream)和上传、压缩和解压(三方框架ZipArchive),请求头和请求体格式,断点续传Range

    一.小文件下载 NSURL *url = [NSURL URLWithString:@"http://120.25.226.186:32812/resources/images/minion ...

  9. request获取请求头和请求数据

    package cn.itcast.request; import java.io.IOException; import java.io.InputStream; import java.io.Pr ...

随机推荐

  1. iOS下FMDB的多线程操作(一)

    iOS中一些时间比较长的操作都应该放在子线程中,以避免UI的卡顿.而sqlite 是非线程安全的,故在多线程中不能共用同一个数据库连接,否则会导致EXC_BAD_ACCESS.所以我们可以在子线程中创 ...

  2. java实现Quartz定时功能

    本文是在学习中的总结,欢迎转载但请注明出处:http://blog.csdn.net/pistolove/article/details/49975443 最近在学习定时相关的技术.当前,几乎所有的互 ...

  3. objective-c随机数+日期格式显示一例

    在原来的代码上有修改,主要为: 将准备随机数方法放到了init中,这样不用手动调用了 setWeek方法已经过时,使用的是setWeekOfYear方法 在此放一份以备以后查找: le.h // // ...

  4. C# 添加、读取Word脚注尾注

    脚注和尾注是对文本的补充说明.脚注一般位于页面的底部,可以作为文档某处内容的注释:尾注一般位于文档的末尾,列出引文 的出处等.在本示例中将介绍如何来添加或删除Word脚注. 工具使用:Free Spi ...

  5. 你真的知道.NET Framework中的阻塞队列BlockingCollection的妙用吗?

    BlockingCollection集合是一个拥有阻塞功能的集合,它就是完成了经典生产者消费者的算法功能.一般情况下,我们可以基于 生产者 - 消费者模式来实现并发.BlockingCollectio ...

  6. 《C++标准程序库》学习笔记(一)C++相关特性

    抱着本厚厚的<C++标准库>读了几天,想想也该写点关于用法的总结,一来怕今后容易忘记,二来将书上的事例重新敲一遍,巩固对程序库相关知识的了解.今天开第一篇,以后不固定更新.当然,笔者所读为 ...

  7. 10.API 接口自动化测试的基本原理

    p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 28.0px Helvetica } p.p2 { margin: 0.0px 0.0px 0.0px 0. ...

  8. 学习spring中遇见的问题

    报错: Unexpected exception parsing XML document from class path resource [applicationContext.xml]; nes ...

  9. id为194024的进程当前未运行

    .NET MVC 编译运行时 提示  >> id为194024的进程当前未运行 << 清理解决方案,重新运行

  10. MFC学习问题总结

    1.学习MFC添加位图,无法获取其ID 1).点击视图->其他窗口->资源视图,你会发现“无法在此窗口显示”,找到resource.h文件,关闭即可重新走一遍上面的过程就会发现可以打开了. ...