首页
|
java
|
C/C++
|
PHP
|
操作系统
|
ajax
|
脚本编程
|
安全技术
|
本站下载页
|
flex
|
CRM
|
专题
|
QQ群
|
测试中心
|
会员中心
|
积分规则
当前位置:
主页
>
java
>文章内容
Java防止非法和重复表单提交的分析
来源: 作者:
第一,对于不支持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);
上一篇:
Zend Optimizer for Linux安装
下一篇:
JSP实现统计当前在线人数的实例代码
[
收藏
] [
推荐
] [
评论(0条)
]
[返回顶部]
[打印本页]
[关闭窗口]
用户名:
(
新注册
) 密码:
匿名评论
评论内容:(不能超过250字,需审核后才会公布,请自觉遵守互联网相关政策法规。
§
最新评论
:
热点文章
·
java自学路线图
·
JSP入门实例教程
·
JUnit单元测试(2)
·
JUnit单元测试(1)
·
什么是Servlet
·
用AJAX+J2EE实现网上会议室系统
·
浅谈在Java语言中究竟是传值还是
·
Java 5.0 多线程编程实践
·
Java的文件 读和写
·
构造器内部的多态方法的行为
·
JSP常用内置对象使用说明
·
对于JAVA基础测试中常见的异常问
相关文章
·
JSP实现统计当前在线人数的实例
·
Jsp页面列表组件框架设计
·
JavaServer Faces框架使用的设计
·
实现jsp页面二级下拉框联动,实时
·
JSF 应用程序的生命周期
·
Java编程思想面向对象逻辑思维方
·
JSF 检验器
·
J2EE学习者值得研究的开源项目
·
JSF 生命周期、转换、检验和阶段
·
struts标签使用举例-logic
·
JSF与Struts的异同
·
web开发中的缓存问题的研究(一
相关信息
copy right @ 百家拳软件项目研究室 2007
辽ICP备07011763