暴力防御:速率限制工具。

0.0.6 2015-12-26 17:23 UTC

This package is auto-updated.

Last update: 2024-09-14 03:05:36 UTC


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/