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),
]
nake_api_protect 请求保护器——防止请求被恶意刷的更多相关文章
- 第106天:Ajax中同步请求和异步请求
同步请求和异步请求的区别 1.同步是指:发送方发出数据后,等接收方发回响应以后才发下一个数据包的通讯方式. 用户填写所有信息后,提交给服务器,等待服务器的回应(检验数据),是一次性的.信息错误又要重新 ...
- ASP.NET Core应用针对静态文件请求的处理[2]: 条件请求与区间请求
通过调用ApplicationBuilder的扩展方法UseStaticFiles注册的StaticFileMiddleware中间件帮助我们处理针对文件的请求.对于StaticFileMiddlew ...
- Java Web中请求转发和请求包含
1.都是在一个请求中跨越多个Servlet 2.多个Servlet在一个请求中,他们共享request对象.就是在AServle中setAttribute()保存数据在BServlet中由getAtt ...
- Ajax中Get请求与Post请求的区别
Get请求和Post请求的区别 1.使用Get请求时,参数在URL中显示,而使用Post方式,则不会显示出来 2.使用Get请求发送数据量小,Post请求发送数据量大 例子 页面的HTML代码: &l ...
- WebApi系列~基于单请求封装多请求的设计
回到目录 怎么说,单请求封装多请求,这句话确实有点绕了,但还是要看清楚,想明白这到底是怎么一回事,单请求即一次请求(get,post,put,delete),封闭多请求,即在客户端发送的一个请求中可能 ...
- 详细解读XMLHttpRequest(一)同步请求和异步请求
本文主要参考:MDN XMLHttpRequest 让发送一个HTTP请求变得非常容易.你只需要简单的创建一个请求对象实例,打开一个URL,然后发送这个请求.当传输完毕后,结果的HTTP状态以及返回的 ...
- 【读书笔记】iOS网络-同步请求,队列式异步请求,异步请求的区别
一,同步请求的最佳实践. 1,只在后台过程中使用同步请求,除非确定访问的是本地文件资源,否则请不要在主线程上使用. 2,只有在知道返回的数据不会超出应用的内存时才使用同步请求.记住,整个响应体都会位于 ...
- iOS开发——网络篇——文件下载(NSMutableData、NSFileHandle、NSOutputStream)和上传、压缩和解压(三方框架ZipArchive),请求头和请求体格式,断点续传Range
一.小文件下载 NSURL *url = [NSURL URLWithString:@"http://120.25.226.186:32812/resources/images/minion ...
- request获取请求头和请求数据
package cn.itcast.request; import java.io.IOException; import java.io.InputStream; import java.io.Pr ...
随机推荐
- iOS下FMDB的多线程操作(一)
iOS中一些时间比较长的操作都应该放在子线程中,以避免UI的卡顿.而sqlite 是非线程安全的,故在多线程中不能共用同一个数据库连接,否则会导致EXC_BAD_ACCESS.所以我们可以在子线程中创 ...
- java实现Quartz定时功能
本文是在学习中的总结,欢迎转载但请注明出处:http://blog.csdn.net/pistolove/article/details/49975443 最近在学习定时相关的技术.当前,几乎所有的互 ...
- objective-c随机数+日期格式显示一例
在原来的代码上有修改,主要为: 将准备随机数方法放到了init中,这样不用手动调用了 setWeek方法已经过时,使用的是setWeekOfYear方法 在此放一份以备以后查找: le.h // // ...
- C# 添加、读取Word脚注尾注
脚注和尾注是对文本的补充说明.脚注一般位于页面的底部,可以作为文档某处内容的注释:尾注一般位于文档的末尾,列出引文 的出处等.在本示例中将介绍如何来添加或删除Word脚注. 工具使用:Free Spi ...
- 你真的知道.NET Framework中的阻塞队列BlockingCollection的妙用吗?
BlockingCollection集合是一个拥有阻塞功能的集合,它就是完成了经典生产者消费者的算法功能.一般情况下,我们可以基于 生产者 - 消费者模式来实现并发.BlockingCollectio ...
- 《C++标准程序库》学习笔记(一)C++相关特性
抱着本厚厚的<C++标准库>读了几天,想想也该写点关于用法的总结,一来怕今后容易忘记,二来将书上的事例重新敲一遍,巩固对程序库相关知识的了解.今天开第一篇,以后不固定更新.当然,笔者所读为 ...
- 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. ...
- 学习spring中遇见的问题
报错: Unexpected exception parsing XML document from class path resource [applicationContext.xml]; nes ...
- id为194024的进程当前未运行
.NET MVC 编译运行时 提示 >> id为194024的进程当前未运行 << 清理解决方案,重新运行
- MFC学习问题总结
1.学习MFC添加位图,无法获取其ID 1).点击视图->其他窗口->资源视图,你会发现“无法在此窗口显示”,找到resource.h文件,关闭即可重新走一遍上面的过程就会发现可以打开了. ...