gburtini / bfd
暴力防御:速率限制工具。
0.0.6
2015-12-26 17:23 UTC
Requires
- php: >=5.4.0
README
这个项目已经多年未维护。请在有足够知识自行构建的情况下自行承担风险使用。
一个用于减轻在线架构中暴力攻击的轻量级框架。
目前,只有一个工具,即基于会话的速率限制器。它非常通用且强大,但这里还有很多工作要做。
安装
通过composer进行安装。
composer require gburtini/bfd
使用
SessionThrottle
__construct(string $name, int $safe, int $upper, float $rate, boolean sleep)
fail()
,succeed()
- 用于报告受保护操作的结果,失败会增加计数器,成功则重置它。(如果成功/失败对您的用例没有意义,则可分别用作increment()
和reset()
)test()
- 返回true或false,表示是否应允许请求调用发生。
构造SessionThrottle意味着设置参数。
$name
- 一个令牌,用于保护SessionThrottle实例所保护元素、函数或方法$safe
- 用户在开始受到速率限制之前“免费”失败的次数,对于大多数与登录相关的应用程序,可以安全地将此值设置得相当高。$upper
- 可用$rate的最高幂。默认情况下,这是20(速率1.3),意味着最高超时时间为1.3^20 = 190秒。$rate
- 用于计算时间限制的指数的基数。默认值为1.3。太大,节流器会过于激进。太小,则不够激进。$sleep
- true/false,用于指示->test()是否应尝试始终返回true(通过简单地休眠直到时间限制过去)。即使sleep为true,休眠也可能被中断,从而返回false。仅仅休眠并不能防止大多数用例的多次请求。您必须检查test
的返回值。
示例使用
use gburtini\bfd\SessionThrottle;
$login_limit = new SessionThrottle("login_bob");
// can have "login" throttles or "login_%username%" throttles... or even just an expensive process can be throttled by this.
if($login_limit->test()) {
if(!checkLogin($user, $pass)) {
$login_limit->fail(); //or ->increment()
} else {
$login_limit->succeed(); // clear the timelimit (or ->reset())
}
} else {
showThrottleError();
}
未来工作
意图是在这里收集一套减轻暴力攻击的工具。SessionThrottle工具只是一个开始。
- 基于IP的高效阻止和节流。
- 数据级别的阻止(对特定数据访问的非会话限制)
- 全球关闭工具,用于减轻大规模暴力攻击。
- 设备Cookie工具
许可证
版权(C)2015 Giuseppe Burtini
本程序是自由软件:您可以在自由软件基金会发布的GNU通用公共许可证的条款和条件下重新分发和/或修改它,许可证版本为2,或者(根据您的选择)任何更新的版本。
本程序按照“按原样”提供,不提供任何保证;甚至不提供适销性或特定用途适用性的暗示性保证。有关详细信息,请参阅GNU通用公共许可证。
您应该已随本程序收到GNU通用公共许可证的一份副本。如果没有,请参阅https://gnu.ac.cn/licenses/。