发新帖
打印 上一主题 下一主题
开启左侧边栏

服务器端程序中加入判断用户登录密码是否在客户端就加密了,否则中断php程序

[复制链接]
跳转到指定楼层
楼主
修改方法如下:

/source/class/class_member.php



                } else {

                        if(!empty($_GET['auth'])) {
                                list($_GET['username'], $_GET['password']) = daddslashes(explode("\t", authcode($_GET['auth'], 'DECODE', $_G['config']['security']['authkey'])));
                        }

改成

                } else {

                        if(!empty($_GET['auth'])) {
                                list($_GET['username'], $_GET['password']) = daddslashes(explode("\t", authcode($_GET['auth'], 'DECODE', $_G['config']['security']['authkey'])));
                        }
                        if(!preg_match('/^[a-f0-9]{32}$/', $_GET['password'])){
                                exit('Access Denied');
                        }

功能: 如果用户的本地计算机没有,或没有成功将用户密码立地立即加密,然后才传输给网站服务器,如果服务器端的程序收到用户密码不是一个32位MD5值,则php程序立即中断,显示信息:Access Denied (进入被阻断),不给更多反馈信息。

作用一:强制客户端程序必须成功将用户在本地计算机输入的密码立地加密为MD5值,确保用户密码的较安全传输,否则无法成功登录。

作用二:阻断可能的黑客暴力破解尝试。怀疑黑客用一个简短的、预知的、便于分析的密码(当然是错误的密码,甚至连用户名都不存在)反复不断尝试登录,进而分析系统的每次不同反馈,暴力破解重要参数如,formhash 和 authkey。

实际上Discuz X3中 电脑版实现了在客户端先把用户密码进行MD5加密,但是在手机版(包括标准版和触屏版)里表面上在做,实际上没做成,传给了服务器端一个还未加密的原始明码。这是Discuz系统中现存的一个蹊跷的、有点迷惑人的、较危险的漏洞。

我还将另文介绍如何改进,使手机版(对本网也就是触屏版)也实现电脑版的那个成功的客户端加密功能。见《改进Discuz手机版,也真正实现在客户端就加密用户密码,然后再传输》。

似乎2019年10月28日以后,黑客才真正停止了暴力破解。


相关帖子




www.51haoyou.com

GMT-5, 2024-11-21 11:11

© 2005-

快速回复 返回顶部 返回列表