首页 ┆ 网站地图 ┆ 在线留言 ┆ 游戏资讯 ┆ 资源下载 ┆ 端午节祝福 ┆ 迅雷在线影视 ┆淘宝手机在线充值 ┆淘宝游戏点卡充值 
设为首页
加入收藏
联系我们
高级搜索
您当前的位置: 主页>JAVA专区>JSP>Java防止非法和重复表单提交的分析
Java防止非法和重复表单提交的分析
来源: 发布时间:2008-02-27 发布人: 浏览: 人次   字体: [ ]  
第一,对于不支持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);

相 关 文 章   发布商链接
·jsp利用Session防止表单重复提交
·Java使用ANT在线编译不用重启tomcat...
·JSP彩色验证码生成实例代码
·Jsp实现网站用户注册使用激活码的代...
·实例讲解JSP和JavaScript实现的二级...
·当jsp和servlet出现乱码问题后的解决...
·实例代码讲解jsp上传图片并过滤图片...
·三种方法讲解在java实现URL重写的代...
·JSP上传图片的代码提供
·javat实现正则表达式只替换URL字符串...
 §最新评论:(评论内容只代表网友观点,与本站立场无关!)
网名: 验证码:  【所有评论】【↑返回顶部
评 分: 12 345
评论内容:(不能超过500字,请自觉遵守互联网相关政策法规。[按 Ctrl+Enter 可直接提交]
注意:请勿在本站发布政治话题、色情及违反法律的内容。
IT知道网 声明:刊登此文章是为了传递更多信息,文章内容仅供参考,转载请注明出处。
推 荐 文 章
·Jsp实现网站用户注册使用激活
·JSP彩色验证码生成实例代码
·Java使用ANT在线编译不用重启...
·jsp利用Session防止表单重复...
·JSP报表打印的一种简单解决方
·Servlet 采用forward 时,页面
·jsp生成验证码图片的程序
·jsp+ajax技术实现行政区划代...
·JSP防止表单重复提交的三种方
·Ajax+servlet实现页面无刷新...
·经验总结java利用jacob操作wo...
·祥解JSP中的标签库
·JSP实现统计当前在线人数的实
·基于JSP的ajax用户注册验证代
·八步实现JSP报表打印
热 门 文 章
·经验总结java利用jacob操作wo...
·jsp+ajax技术实现行政区划代...
·使用struts upload包进行文件...
·基于JSP的ajax用户注册验证代...
·通过流或利用jspsmartupload....
·jsp利用Session防止表单重复...
·Jsp页面列表组件框架设计
·Jsp分页组件制作实例,可以解...
·Ajax+servlet实现页面无刷新...
·JSP防止表单重复提交的三种方...
·八步实现JSP报表打印
·JSP上传图片的代码提供
·实现jsp页面二级下拉框联动,...
·实例代码讲解jsp上传图片并过...
·实例讲解jsp生成静态网页代码...
网站首页 - 关于本站 - 加入收藏 - 网站地图 - 友情连接 - 在线留言 - 联系我们 - 返回顶部
Copyright © 2007 IT知道网.[冀ICP备07026896号]. All Rights Reserved .