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

改进Discuz手机版,也真正实现在客户端就加密用户密码,然后再传输

[复制链接]
跳转到指定楼层
楼主
在文章《服务器端程序中加入判断用户登录密码是否在客户端就加密了,否则中断php程序》里我提到了,在手机版(包括标准版和触屏版)里表面上在做用户密码加密,实际上在客户端没做成,即用户的手机上没做成,传给了服务器端一个还未加密的原始明码。这使密码传输较不安全,也给黑客留下机会分析,尝试暴力破解。

手机版原先没成功加密的原因可能是,同时引用的两个JavaScript文件,/static/js/touch/common.js与/static/js/common.js有冲突,有冲突的原因也可能是手机版特有的ajax(JavaScript)按键功能,菜单功能等。先不细究到底为啥出错,先找到一个成功的方法。

下面是手机版的修改方法,以实现在客户端就加密好用户密码,而不是明码传送:

在/static/js/touch/common.js与/static/js/common.js里有7个重名function,它们是setcookie,getcookie,in_array,stringxor,hash,evalscript,appendscript,其中evalscript,appendscript内容不同,先要把这两个函数改名为evalscript2和appendscript2。

\static\js\touch\common.js



function evalscript(s)

改为

function evalscript2(s)



function appendscript(src, text, reload, charset)

改为

function appendscript2(src, text, reload, charset)



            appendscript(arr1[1], '', arr1[2], arr1[3]);
        } else {
            p1 = /<script(.*?)>([^\x00]+?)<\/script>/i;
            arr1 = p1.exec(arr[0]);
            appendscript('', arr1[2], arr1[1].indexOf('reload=') != -1);

改为

            appendscript2(arr1[1], '', arr1[2], arr1[3]);
        } else {
            p1 = /<script(.*?)>([^\x00]+?)<\/script>/i;
            arr1 = p1.exec(arr[0]);
            appendscript2('', arr1[2], arr1[1].indexOf('reload=') != -1);

将(共两处)

                evalscript(s.lastChild.firstChild.nodeValue);

都改为

                evalscript2(s.lastChild.firstChild.nodeValue);

/template/default/touch/member/login.php



{eval $loginhash = 'L'.random(4);}

改为

<script type="text/javascript" src="{$_G[setting][jspath]}common.js?{VERHASH}"></script>
<div id="append_parent"></div><div id="ajaxwaitid"></div>
<!--{eval $loginhash = 'L'.random(4);}-->



        <form id="loginform" method="post" action="member.php?mod=logging&action=login&loginsubmit=yes&loginhash=$loginhash" >

改为

        <form id="loginform_$loginhash" autocomplete="off" name="login" method="post" action="member.php?mod=logging&action=login&loginsubmit=yes&loginhash=$loginhash" >



            <li><input type="text" value="" tabindex="1" class="jN3ww0GIOz" size="30" autocomplete="off" value="" name="username" placeholder="{lang inputyourname}" fwin="login"></li>
            <li><input type="password" tabindex="2" class="jN3ww0GIOz" size="30" value="" name="password" placeholder="{lang login_password}" fwin="login"></li>

改为

            <li><input type="text" tabindex="1" class="jN3ww0GIOz" size="30" autocomplete="off" value="" name="username" id="username" placeholder="{lang inputyourname}" fwin="login"></li>
            <li><input type="password" tabindex="2" class="jN3ww0GIOz" size="30" value="" name="password" id="password3_$loginhash" placeholder="{lang login_password}" fwin="login"></li>


相关帖子




www.51haoyou.com

GMT-4, 2024-5-17 06:10

© 2005-

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