第一,對於不支援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,