我有我的登录页面,当然我想防止暴力攻击并减少用户登录时的延迟。
目前,您输入用户名和密码进行登录。
我正在考虑实施 reCAPTCHA 。但是,这会在 3 次尝试失败后显示在登录上。
我的问题是:
你的尝试基于什么。 IP地址?它总是可以隐藏…用户名?如果他们正在尝试一个不存在的用户怎么办?
计算失败登录尝试的最佳方法是什么?
原文由 lecardo 发布,翻译遵循 CC BY-SA 4.0 许可协议
我有我的登录页面,当然我想防止暴力攻击并减少用户登录时的延迟。
目前,您输入用户名和密码进行登录。
我正在考虑实施 reCAPTCHA 。但是,这会在 3 次尝试失败后显示在登录上。
我的问题是:
你的尝试基于什么。 IP地址?它总是可以隐藏…用户名?如果他们正在尝试一个不存在的用户怎么办?
计算失败登录尝试的最佳方法是什么?
原文由 lecardo 发布,翻译遵循 CC BY-SA 4.0 许可协议
不要依赖会话或 cookie,它们信任客户端,你永远不应该信任客户端。我制作了一个类来处理 PHP 中的暴力攻击保护。
https://github.com/ejfrancis/BruteForceBlocker
它在数据库表中记录站点范围内所有失败的登录,如果过去 10 分钟(或您选择的任何时间范围)内失败的登录次数超过设定的限制,它会强制执行时间延迟和/或验证码要求再次登录之前。
例子:
//build throttle settings array. (# recent failed logins => response).
$throttle_settings = [
50 => 2, //delay in seconds
150 => 4, //delay in seconds
300 => 'captcha' //captcha
];
$BFBresponse = BruteForceBlocker::getLoginStatus($throttle_settings);
//$throttle_settings is an optional parameter. if it's not included,the default settings array in BruteForceBlocker.php will be used
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;
}
原文由 ejfrancis 发布,翻译遵循 CC BY-SA 3.0 许可协议
2 回答3.1k 阅读✓ 已解决
1 回答1.4k 阅读✓ 已解决
1 回答1k 阅读✓ 已解决
1 回答1.3k 阅读✓ 已解决
3 回答1.2k 阅读
2 回答1.2k 阅读
1 回答1.2k 阅读
会话不可靠,因为它们依赖于 cookie,验证码经常被破坏 [包括 ReCAPTCHA]。唯一可靠的方法看似简单:提出问题。不要使用数学问题,因为计算机出于某种原因 出奇地 擅长解决这些问题。伟大的旧备用品是这样的:
这是愚蠢的——很容易实现,而机器很难解决。
至于强制强制,请尝试向您的用户表添加两个字段,’first_failed_login’ [
INTEGER
unix timestamp orDATETIME
] 和’failed_login_count’。 [INTEGER
]这将使您的登录系统每 10 分钟只能识别每位用户 3 次登录尝试。