java服務端中客服端抓包與構建地址訪問問題

在編寫客服端時,爲實現用戶會話跟蹤常常使用session和 cookie 相結合的方法
          首先服務其生成session 和身份憑證token
         HttpSession  session= request.getSession();
         String token=UUID.randomUUID().toString().toUpperCase();
         session.setAttribute("token", token);
         
       向客服端寫入cookie
         Cookie  tokenCokie=new Cookie("token",token);
         tokenCokie.setMaxAge(1000);
         String  Membertag="memberId";
         Cookie  memberCookie=new Cookie("Membertag",Membertag);
         memberCookie.setMaxAge(1000);
         response.addCookie(tokenCokie);
         response.addCookie(memberCookie); 
       服務端驗證與會話跟蹤
       String cMembertag=null;
         String cToken=null;
         Cookie[]  cookies= request.getCookies();
         if(cookies!=null){
           for(Cookie cookie:cookies){
               if(cookie.getName().equals("cookie")){
                  cToken=cookie.getValue();
               }else if(cookie.getName().equals("Membertag")){
                  cMembertag=cookie.getValue();;
               }
               
           }
         }
         HttpSession Session = request.getSession(true);
         if(cToken.equals(session.getAttribute("token"))){
          //驗證通過
         }else{
           //驗證不通過
         }
    這樣便實現的客服端的回話跟蹤的實現 
 
     但是存在安全風險,
          在客服端登入後由於token是不變的故可以使用Fidder等工具構建請求,重而實現不用使用客服端也可訪問服務。
    爲解決這樣的問題,可以通過構建動態tonken實現具體如下
        首先服務其生成session 和身份憑證token不變
         HttpSession  session= request.getSession();
         String token=UUID.randomUUID().toString().toUpperCase();
         session.setAttribute("token", token);
    向客服端寫入cookie
                       獲取系統時間戳
         String time= String.valueOf(System.currentTimeMillis());
                    設置客服端tokenCokie爲token+";"+time
         token=token+";"+time
         //對token進行加密自密鑰爲123456 之後將結果設置給客戶端的cokie
         token=Decoder(token,"123456")
         Cookie  tokenCokie=new Cookie("token",token);          
         tokenCokie.setMaxAge(1000);
         String  Membertag="memberId";
         Cookie  memberCookie=new Cookie("Membertag",Membertag);
         memberCookie.setMaxAge(1000);
         response.addCookie(tokenCokie);
         response.addCookie(memberCookie);
          客戶端對收到的結果進行的   tokenCokie進行解密將的得到時間戳和token
         並將  token+";"+客服端時間戳 的結果進過加密後設置在cookie 作爲下一次訪問使用
         String cMembertag=null;
         String cToken=null;
         Cookie[]  cookies= request.getCookies();
         if(cookies!=null){
           for(Cookie cookie:cookies){
               if(cookie.getName().equals("cookie")){
                  //取出cToken
                  cToken=cookie.getValue();
                  //取出cToken中的token cToken的值爲(Token+";"+時間戳)
                  cToken=Token
               }else if(cookie.getName().equals("Membertag")){
                  cMembertag=cookie.getValue();;
               }
               
           }
         }
         HttpSession Session = request.getSession(true);
         if(cToken.equals(session.getAttribute("token"))){
          //驗證通過
             。。。。。。
         爲客服端設置新的cookie 值爲   token =ession.getAttribute("token")+";"+時間戳
         }else{  
           //驗證不通過
         }
          
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章