在文章《服务器端程序中加入判断用户登录密码是否在客户端就加密了,否则中断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> |
GMT-5, 2024-12-21 11:17
© 2005-