lycong

经常碰到的模块:修改密码 一 安全小技巧(服务器后台不返回密码)

        问题如下:当修改密码时,为了防止通过查看html源文件或其他方法看到用户的原始密码,一般服务器不会返回用户密码,可以利用javascript的技巧 ,在页面显示一虚假密码,然后判断密码是否修改过,如果真有修改过密码,才把密码送到后台服务器,否则不发送密码到后台服务器。
1. 页面显示代码:
<%--构造一个虚假的密码显示框--%>
                     
<fmt:message key="falsity_password_defaultValue" var="falsity_password_defaultValue" />
                     
<input id="falsity_password" type="password" name="falsity_password"
                             
default="${falsity_password_defaultValue}"
                             value
="${fn:escapeXml(param.falsity_password != null ? param.falsity_password : falsity_password_defaultValue)}" autocomplete="off">
                     
<input id="true_password" type="hidden" name="password"/>
其中 falsity_password_defaultValue 为服务器端事先设置好的虚假密码(可以在资源文件中设置), falsity_password 为页面显示的虚假密码,true_password 是当密码修改后,才发送到服务器, 下面就会对上面2个变量值作一些处理判断。

2. 对是否修改过密码进行处理。
A.当focus到密码框时,密码框清空, 到没有修改过密码就离开密码框时,就还原为虚假密码显示.
B.当修改过密码后,就会把true_password的值设置为修改后的值。
 <script type="text/javascript"><!--
  
function getTruePassword(){
    
<c:if test="${param.edit == 'modify'}">
      
var falsity_password = document.getElementById("falsity_password");
      
var true_password = document.getElementById("true_password");
           
if(falsity_password && true_password){
      
var defaultValue=falsity_password.getAttribute("default");

          
if(falsity_password.value != defaultValue) {
               true_password.value 
= falsity_password.value;
          }

      }

    
</c:if>
  }

  
<c:if test="${param.edit == 'modify'}">
  
var falsity_passwordNode = document.getElementById("falsity_password");
  
if(falsity_passwordNode) {
      Object.extend(falsity_passwordNode, 
{
          onfocus : 
function() {
              
if (this.value == this.getAttribute("default")) {
                  
this.value = '';
              }

          }
,
          onblur : 
function() {
              
if (this.value == '') {
                  
this.value = this.getAttribute("default");
              }

          }

      }
)

  }

  
</c:if>
  
//--></script>

判断falsity_password密码是否为虚假密码,若不是,则把true_password设置为修改过的密码。


3.服务器端要判断是否修改过密码,若修改过才把密码传到后台进行修改,这里主要看true_password是否为" ",若不为" ",则说明密码修改过。
这里可以通过tag来进行处理
<c:if test="${!empty param.true_password}">
/* 把true_password 传到后台进行修改    */
</c:if>


posted on 2008-07-06 20:14 cong 阅读(552) 评论(0)  编辑  收藏 所属分类: JavaScript


只有注册用户登录后才能发表评论。


网站导航:
 

My Links

Blog Stats

常用链接

留言簿(1)

随笔分类

随笔档案

搜索

最新评论

阅读排行榜

评论排行榜