加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

尝试过多后如何延迟登录尝试(PHP)

发布时间:2020-12-13 22:39:00 所属栏目:PHP教程 来源:网络整理
导读:我正在开发一个用 PHP构建的相当大的网站,可能会有很多用户.我正在寻找一种方法来保护登录屏幕免受自动尝试.我已经在注册表中加入了CAPTCHA检查,但希望更多地加强网站. 我知道StackOverflow上有类似的问题,我知道我有能力从头开始实现这个(存储登录尝试和他
我正在开发一个用 PHP构建的相当大的网站,可能会有很多用户.我正在寻找一种方法来保护登录屏幕免受自动尝试.我已经在注册表中加入了CAPTCHA检查,但希望更多地加强网站.

我知道StackOverflow上有类似的问题,我知道我有能力从头开始实现这个(存储登录尝试和他们在数据库中的时间),但我不喜欢这条路径:

>从概念上讲,我认为这种逻辑属于Web服务器/基础架构级别,而不属于应用程序级别.我不喜欢在我的应用程序中使用这种逻辑和复杂性
>我担心性能,特别是在数据库级别.
>我很懒,很好,不想从头开始构建这样的通用实用程序

任何建议都表示赞赏,我认为我特别想找到某种可以做到这一点的Apache模块.我的平台是PHP5(使用CodeIgniter),Apache2,MySQL 5.

更新:不要使用sleep()进行速率限制!这根本没有意义.我手边没有更好的解决方案.

一个好的开始就是睡觉(1);登录尝试失败后 – 易于实现,几乎没有错误.

1秒对于人类来说并不多(特别是因为人类的登录尝试经常不会失败),但是1秒/尝试暴力……懒散!字典攻击可能是另一个问题,但它在同一个域中.

如果攻击者启动也可以通过连接来规避这种情况,那么就可以处理一种DOS攻击.问题解决了(但现在你有另一个问题).

你应该考虑的一些东西:

>如果您基于每个IP锁定帐户,则私有网络可能存在问题.
>如果您以用户名为基础锁定帐户,则可以再次使用已知用户名进行拒绝服务攻击
>基于IP /用户名锁定(其中用户名是被攻击者)可以更好地工作

我的建议:
完全锁定是不可取的(DOS),因此更好的选择是:从唯一的IP计算某个用户名的登录尝试.你可以用一个简单的表fail_logins:IP / username / failed_attempts来做到这一点

如果登录失败,请等待(failed_attempts);秒.每隔xx分钟,运行一个减少failed_logins的cron脚本:failed_attempts减一.

对不起,我无法提供预制解决方案,但这应该是无足轻重的.

好吧好吧.这是伪代码:

<?php
$login_success = tryToLogIn($username,$password);

if (!$login_success) {
    // some kind of unique hash
    $ipusr = getUserIP() . $username;

    DB:update('INSERT INTO failed_logins (ip_usr,failed_attempts) VALUES (:ipusr,1) ON DUPLICATE KEY UPDATE failed_logins SET failed_attempts = failed_attempts+1 WHERE ip_usr=:ipusr',array((':ipusr' => $ipusr));

    $failed_attempts = DB:selectCell('SELECT failed_attempts WHERE ip_usr=:ipusr',array(':ipusr' => $ipusr));

    sleep($failed_attempts);
    redirect('/login',array('errorMessage' => 'login-fail! ur doin it rong!'));
}
?>

免责声明:这可能在某些地区不起作用.我听到的最后一件事是在亚洲有一个整个国家NATed(他们都知道功夫).

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读