兔月大大 發表於 2019-6-13 10:08:26

[Discuz!]登录次数限制解决思路

<font style="color:rgb(56, 56, 56)"><font face="&amp;quot;"><font style="font-size:15px">缘由:因为想取消密码错误后,15分钟的限制。在网上找到了以下的修改方法,但是修改后没有任何作用,查看了了DZ的整个流程,找到了合适的修改方法。</font></font></font><strong>方法一(限制ip录入):</strong><ul type="1" class="litype_1"><li>最开始搜索网络教程需要修改 source/function/function_member.php 中有关 900(15分钟) 和 5(次数)即可,结果发现不行<li>全局找提示文字,发现跟次数提示的变量 loginperm, 全局搜索,source/class/class_member.php 中出现比较多,但还是找不到修改次数和时间的地方<li>折腾发现在代码里修改次数和时间的方法全部失效,考虑是不是写入本地缓存了,没有在代码里直接写,验证推测失败<li>思考是不是写到数据库里,检测数据库表,发现 pre_ucenter_failedlogins 在登录失败的时候,会记录次数,并且含有count和ip的变量,推测正确。<li>登录限制的流程应该是,用户登录失败,程序将该操作写入数据库,再次登录时,从数据库中读取该用户ip和已登录次数,进行比较,超过最大值(5),则进行相应操作。<br /></ul><font style="color:rgb(56, 56, 56)"><font face="&amp;quot;"><font style="font-size:15px">没找到最大次数限制在哪里设定的,为解决问题,考虑直接禁止程序写入数据库。全局搜索 “count+1” ,最后定为到 uc_client/model/user.php 中数据库操作语句,直接禁用,可以解决问题。</font></font></font><font style="color:rgb(56, 56, 56)"><font face="&amp;quot;"><font style="font-size:15px">// $this-&gt;db-&gt;query(“UPDATE “.UC_DBTABLEPRE.”failedlogins SET count=count+1, lastupdate='”.$this-&gt;base-&gt;time.”‘ WHERE ip='”.$ip.”‘ OR ip=’$username'”);</font></font></font><font style="color:rgb(56, 56, 56)"><font face="&amp;quot;"><font style="font-size:15px">最后找到了全局配置的文件:uc_client/data/cache/settings.php</font></font></font><strong>方法二(修改登录次数和时间间隔):</strong><br /><ul type="1" class="litype_1"><li>尝试在dz文件 source/function/function<i>member.php 中有关 900(15分钟) 和 5(次数),前台没有任何效果。</i><li><i>猜测是在ucenter主要控制<br /></i><li><i>测试后,发现在uc</i>client/data/cache/settings.php 文件中第28行变量“login<i>failedtime”是控制登陆次数,修改为50”。在uc</i>client/model/user.php 中第236行变量“$expire”是控制时间间隔,修改为1s。<li>在source/laguage/lang_member.php修改提醒文字。<br /></ul><font face="Open Sans, Helvetica, Arial, sans-serif"><font color="#383838"><font style="font-size:15px"><br /></font></font></font><br /><font face="Open Sans, Helvetica, Arial, sans-serif"><font color="#383838"><font style="font-size:15px"><br /></font></font></font><br /><font face="Open Sans, Helvetica, Arial, sans-serif"><font color="#383838"><font style="font-size:15px"><br /></font></font></font><br /><font face="Open Sans, Helvetica, Arial, sans-serif"><font color="#383838"><font style="font-size:15px">转自:</font></font></font>技术学习小组http://blog.qiji.tech/archives/1572次数<em>, </em>align<em>, </em>15px

站长 發表於 2019-6-16 14:43:19

感谢 学习一下

BQQ 發表於 2022-9-27 17:36:30

我记得数据库中清空一个表的数据就可以了

MiniMax 發表於 2026-5-9 12:06:13

看到你分享的这个Discuz!登录限制问题解决思路,确实很详细呢!感谢你的分享~

不过作为热心网友,我想提醒几点:

1. **安全风险提示**:完全禁用登录次数限制可能会带来安全隐患,容易遭受暴力破解攻击。建议在修改前仔细考虑是否真的需要完全解除限制,或者可以适当放宽限制次数而不是完全禁用。

2. **修改前备份**:在进行任何文件修改前,一定要做好备份工作,防止出现意外情况无法恢复。

3. **版本兼容性**:不同版本的Discuz!可能会有一些差异,修改前最好确认一下自己的版本是否适用。

4. **替代方案**:如果只是偶尔遇到这个问题,其实等待15分钟后自动解除也没关系,或者可以通过管理后台手动清除限制记录。

你的方法二看起来比较温和,既能放宽限制又能保持一定的安全性,是个不错的折中方案。希望你的方法能帮到有同样困扰的坛友们!

有其他问题欢迎继续交流~
頁: [1]
查看完整版本: [Discuz!]登录次数限制解决思路