<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    風人園

    弱水三千,只取一瓢,便能解渴;佛法無邊,奉行一法,便能得益。
    隨筆 - 99, 文章 - 181, 評論 - 56, 引用 - 0
    數據加載中……

    Java防止非法和重復表單提交的分析(ZT)

    第一,對于不支持POST的,可以簡單的使用如下代碼
    if ("POST".equals(request.getMethod())) {
      
    // 正常進行
    }
    else{
      
    // 異常請求
      out.print("異常訪問");
      
    return;
    }

    如果是servlet, 可以將doGet方法直接返回,不進行處理就行了
    public void doGet(HttpServletRequest request, HttpServletResponse response) {
      
    return;
    }

    public void doPost(HttpServletRequest request, HttpServletResponse response) {
      
    // 正常進行操作
    }

    還可以采用特定的標志來區分,比如
    <form><input type="hidden" name="action" value="insert"/></form> 

    程序里這樣判斷
    if ("POST".equals(request.getMethod()) && ("insert".equals(request.getParameter("action")))) {
      
    // 正常進行
    }
    else{
      
    // 異常請求
      out.print("異常訪問");
      
    return;
    }

    第二,判斷提交的來源referer,代碼如下
    if ("POST".equals(request.getMethod())) {
      String referer 
    = request.getHeader("referer");
      
    if (referer == null || !referer.startsWith("http://"+request.getServerName())) {
        
    // 非法來源
        return;
      }

      
    // 正常進行
    }
    else{
      
    // 異常請求
      out.print("異常訪問");
      
    return;
    }

    第三 防止重復提交的hashCode
    在表單顯示頁面
      //生成一個formhash,算法可以自己定,不隨便重復就可以了
      String formhash = MD5.encode(Long.toString(new Date().getTime()));
      
    //讀取當前session里面的hashCode集合,此處使用了Set,方便判斷。
      Set<String> formhashSession = (Set<String>) session.getAttribute("formhashSession");
      
    if (formhashSession == null{
        formhashSession 
    = new HashSet<String>();
      }

      
    // 檢測重復問題
      while (formhashSession.contains(formhash)) {
        formhash 
    = MD5.encode(Long.toString(new Date().getTime()));
      }

      
    // 保存到session里面
      formhashSession.add(formhash);
      
    // 保存
      session.setAttribute("formhashSession", formhashSession);

    表單里面增加如下字段
    <input type="hidden" name="formhash" id="formhash" value="<%=formhash%>" /> 

    在表單提交頁面進行如下處理
        // 拿到表單的formhash
        String formhash = upload.getParameter("formhash");
        
    // 拿到session里面的集合
        Set<String> formhashSession = (Set<String>) session.getAttribute("formhashSession");
        
    // 如果沒有,則是重復提交,或者非法提交
        if (formhashSession == null || !formhashSession.contains(formhash)) {
          out.println(
    "請不要重復提交!");
          
    return;
        }

        
    // 下面進行其它的操作
        
    // 
        
    // 最后,如果操作成功,從session里面把這個formhash 刪掉!
        
    // 以免用戶少填寫了某個字段,造成表單無法再次提交
        formhashSession.remove(formhash);
        session.setAttribute(
    "formhashSession", formhashSession);

    以上內容為本人原創內容,如要轉載,請保留完整信息。并注明來源為http://blog.csdn.net/或http://www.Java2000.net,

    Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=2119298

    posted on 2008-02-29 16:42 風人園 閱讀(486) 評論(0)  編輯  收藏 所屬分類: Java

    主站蜘蛛池模板: 欧亚一级毛片免费看| 国产亚洲玖玖玖在线观看| 亚洲熟妇无码另类久久久| 亚洲一区二区三区AV无码| 免费人成网站永久| 亚洲综合国产精品第一页| 亚洲女人18毛片水真多| 偷自拍亚洲视频在线观看99| 中国黄色免费网站| 999在线视频精品免费播放观看| 好吊妞在线新免费视频| 亚洲精品动漫人成3d在线| 亚洲邪恶天堂影院在线观看| 亚洲国产亚洲综合在线尤物| 一级一片免费视频播放| 久久午夜免费视频| 亚洲AV永久青草无码精品| 亚洲精品天堂在线观看| 成熟女人特级毛片www免费| 亚洲精品无码不卡在线播放HE| 日韩在线视精品在亚洲| 一个人免费观看在线视频www| 区三区激情福利综合中文字幕在线一区亚洲视频1 | 伊伊人成亚洲综合人网7777| 亚洲欧美日韩中文字幕在线一区 | 18禁超污无遮挡无码免费网站| 一本无码人妻在中文字幕免费 | 精品亚洲一区二区三区在线播放| 亚洲永久网址在线观看| 亚洲精品在线免费看| 亚洲中久无码不卡永久在线观看| 四虎国产精品免费永久在线| 免费亚洲视频在线观看| 亚洲成年网站在线观看| 男人的天堂亚洲一区二区三区| 亚洲精品在线不卡| 日韩精品久久久久久免费| 亚洲国产av无码精品| 美女裸免费观看网站| 免费v片在线观看品善网| 国产在线观a免费观看|