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 閱讀(567) 評論(0)  編輯  收藏 所屬分類: JavaScript

          My Links

          Blog Stats

          常用鏈接

          留言簿(1)

          隨筆分類

          隨筆檔案

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 南丹县| 凤冈县| 尤溪县| 攀枝花市| 观塘区| 华池县| 德州市| 卓尼县| 罗源县| 西乌| 高淳县| 东源县| 南木林县| 柘城县| 思南县| 景泰县| 南陵县| 东方市| 汉阴县| 呼图壁县| 翼城县| 乌拉特中旗| 大渡口区| 九龙坡区| 咸宁市| 浙江省| 精河县| 泸定县| 长沙县| 五台县| 酉阳| 桑日县| 景德镇市| 宜兴市| 沅陵县| 西青区| 淮滨县| 湖南省| 会泽县| 游戏| 上高县|