楼主
51haoyouadmin 2019-12-11
在文章《服务器端程序中加入判断用户登录密码是否在客户端就加密了,否则中断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>
|
|