ejfrancis / brute-force-block
暴力破解攻击预防类。
dev-master
2017-06-02 23:20 UTC
Requires
- php: >=5.1.0
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 并手动包含。
配置
- 在
$_db数组中配置数据库连接。
auto_clear选项确定是否自动清除旧的数据库条目
- (可选) 在
$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;
用法
- 根据您的用户基础的大小和活动性构建节流设置
//# failed login attempts => throttle action $throttle_settings = [ 50 => 2, //delay in seconds 150 => 4, //delay in seconds 300 => 'captcha' //captcha ];
- 获取登录状态。在构建登录表单时使用此功能
$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; }