ejfrancis/brute-force-block

暴力破解攻击预防类。

dev-master 2017-06-02 23:20 UTC

This package is not auto-updated.

Last update: 2024-09-25 13:38:37 UTC


README

PHP 的自动暴力破解攻击预防类。将网站范围内的所有失败的登录尝试存储在数据库中,并将最近失败的尝试次数与设定的阈值进行比较。在登录请求之间响应时间延迟或验证码要求。

由 Evan Francis 实现,用于 2014 年的 AlpineAuth 库。

灵感来源于 Corey Ballou 的作品,http://stackoverflow.com/questions/2090910/how-can-i-throttle-user-login-attempts-in-php

MIT 许可证 https://open-source.org.cn/licenses/MIT

安装

推荐使用 composer 安装,以下为 require 语句:

"ejfrancis/brute-force-block": "dev-master"

您也可以下载类文件 BruteForceBlock.php 并手动包含。

配置

  1. $_db 数组中配置数据库连接。
  • auto_clear 选项确定是否自动清除旧的数据库条目
  1. (可选) 在 $default_throttle_settings_array 中设置默认的节流设置

注意:节流设置应根据您的用户基础的大小和活动性来确定。默认设置不应依赖于。

##使用以下 SQL 文件创建 MySQL 数据库:user_failed_logins.sql 或以下语句:

CREATE TABLE IF NOT EXISTS `user_failed_logins` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `user_id` bigint(20) NOT NULL,
  `ip_address` int(11) unsigned DEFAULT NULL,
  `attempted_at` datetime NOT NULL,
  PRIMARY KEY (`id`)
) DEFAULT CHARSET=utf8;

用法

  1. 根据您的用户基础的大小和活动性构建节流设置
//# failed login attempts => throttle action
$throttle_settings = [
  50 => 2, 			//delay in seconds
  150 => 4, 			//delay in seconds
  300 => 'captcha'	//captcha
];
  1. 获取登录状态。在构建登录表单时使用此功能
$BFBresponse = ejfrancis\BruteForceBlock::getLoginStatus($throttle_settings);	

switch ($BFBresponse['status']){
	case 'safe':
		//safe to login
		break;
	case 'error':
		//error occured. get message
		$error_message = $BFBresponse['message'];
		break;
	case 'delay':
		//time delay required before next login
		$remaining_delay_in_seconds = $BFBresponse['message'];
		break;
	case 'captcha':
		//captcha required
		break;
	
}

添加失败的登录尝试

$BFBresponse = ejfrancis\BruteForceBlock::addFailedLoginAttempt($user_id, $ip_address);
if($BFBresponse !== true){
	//get error
	$error_message = $BFBresponse;
}

清除数据库

$BFBresponse = ejfrancis\BruteForceBlock::clearDatabase();
if($BFBresponse !== true){
	//get error
	$error_message = $BFBresponse;
}