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{  
           //验证不通过
         }
          
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章