读书人

[转]Java防止非法跟重复表单提交的分析

发布时间: 2012-12-20 09:53:21 作者: rapoo

[转]Java防止非法和重复表单提交的分析

来源:http://blog.csdn.net/

第一,对于不支持POST的,可以简单的使用如下代码

[转]Java防止非法跟重复表单提交的分析if?("POST".equals(request.getMethod()))?{
[转]Java防止非法跟重复表单提交的分析??//?正常进行
[转]Java防止非法跟重复表单提交的分析}else{
[转]Java防止非法跟重复表单提交的分析??//?异常请求
[转]Java防止非法跟重复表单提交的分析??out.print("异常访问");
[转]Java防止非法跟重复表单提交的分析??return;
[转]Java防止非法跟重复表单提交的分析}


如果是servlet,?可以将doGet方法直接返回,不进行处理就行了

[转]Java防止非法跟重复表单提交的分析public?void?doGet(HttpServletRequest?request,?HttpServletResponse?response)?{
[转]Java防止非法跟重复表单提交的分析??return;
[转]Java防止非法跟重复表单提交的分析}
[转]Java防止非法跟重复表单提交的分析public?void?doPost(HttpServletRequest?request,?HttpServletResponse?response)?{
[转]Java防止非法跟重复表单提交的分析??//?正常进行操作
[转]Java防止非法跟重复表单提交的分析}


还可以采用特定的标志来区分,比如?

[转]Java防止非法跟重复表单提交的分析<form><input?type="hidden"?name="action"?value="insert"/></form>?


程序里这样判断

[转]Java防止非法跟重复表单提交的分析if?("POST".equals(request.getMethod())?&&?("insert".equals(request.getParameter("action"))))?{
[转]Java防止非法跟重复表单提交的分析??//?正常进行
[转]Java防止非法跟重复表单提交的分析}else{
[转]Java防止非法跟重复表单提交的分析??//?异常请求
[转]Java防止非法跟重复表单提交的分析??out.print("异常访问");
[转]Java防止非法跟重复表单提交的分析??return;
[转]Java防止非法跟重复表单提交的分析}


第二,判断提交的来源referer,代码如下

[转]Java防止非法跟重复表单提交的分析if?("POST".equals(request.getMethod()))?{
[转]Java防止非法跟重复表单提交的分析??String?referer?=?request.getHeader("referer");
[转]Java防止非法跟重复表单提交的分析??if?(referer?==?null?||?!referer.startsWith("http://"+request.getServerName()))?{
[转]Java防止非法跟重复表单提交的分析????//?非法来源
[转]Java防止非法跟重复表单提交的分析????return;
[转]Java防止非法跟重复表单提交的分析??}
[转]Java防止非法跟重复表单提交的分析??//?正常进行
[转]Java防止非法跟重复表单提交的分析}else{
[转]Java防止非法跟重复表单提交的分析??//?异常请求
[转]Java防止非法跟重复表单提交的分析??out.print("异常访问");
[转]Java防止非法跟重复表单提交的分析??return;
[转]Java防止非法跟重复表单提交的分析}


第三?防止重复提交的hashCode?
在表单显示页面

[转]Java防止非法跟重复表单提交的分析??//生成一个formhash,算法可以自己定,不随便重复就可以了
[转]Java防止非法跟重复表单提交的分析??String?formhash?=?MD5.encode(Long.toString(new?Date().getTime()));
[转]Java防止非法跟重复表单提交的分析??//读取当前session里面的hashCode集合,此处使用了Set,方便判断。
[转]Java防止非法跟重复表单提交的分析??Set<String>?formhashSession?=?(Set<String>)?session.getAttribute("formhashSession");
[转]Java防止非法跟重复表单提交的分析??if?(formhashSession?==?null)?{
[转]Java防止非法跟重复表单提交的分析????formhashSession?=?new?HashSet<String>();
[转]Java防止非法跟重复表单提交的分析??}
[转]Java防止非法跟重复表单提交的分析??//?检测重复问题
[转]Java防止非法跟重复表单提交的分析??while?(formhashSession.contains(formhash))?{
[转]Java防止非法跟重复表单提交的分析????formhash?=?MD5.encode(Long.toString(new?Date().getTime()));
[转]Java防止非法跟重复表单提交的分析??}
[转]Java防止非法跟重复表单提交的分析??//?保存到session里面
[转]Java防止非法跟重复表单提交的分析??formhashSession.add(formhash);
[转]Java防止非法跟重复表单提交的分析??//?保存
[转]Java防止非法跟重复表单提交的分析??session.setAttribute("formhashSession",?formhashSession);


表单里面增加如下字段

[转]Java防止非法跟重复表单提交的分析<input?type="hidden"?name="formhash"?id="formhash"?value="<%=formhash%>"?/>?


在表单提交页面进行如下处理

[转]Java防止非法跟重复表单提交的分析????//?拿到表单的formhash
[转]Java防止非法跟重复表单提交的分析????String?formhash?=?upload.getParameter("formhash");
[转]Java防止非法跟重复表单提交的分析????//?拿到session里面的集合
[转]Java防止非法跟重复表单提交的分析????Set<String>?formhashSession?=?(Set<String>)?session.getAttribute("formhashSession");
[转]Java防止非法跟重复表单提交的分析????//?如果没有,则是重复提交,或者非法提交
[转]Java防止非法跟重复表单提交的分析????if?(formhashSession?==?null?||?!formhashSession.contains(formhash))?{
[转]Java防止非法跟重复表单提交的分析??????out.println("请不要重复提交!");
[转]Java防止非法跟重复表单提交的分析??????return;
[转]Java防止非法跟重复表单提交的分析????}
[转]Java防止非法跟重复表单提交的分析????//?下面进行其它的操作
[转]Java防止非法跟重复表单提交的分析????//?
[转]Java防止非法跟重复表单提交的分析????//?最后,如果操作成功,从session里面把这个formhash?删掉!
[转]Java防止非法跟重复表单提交的分析????//?以免用户少填写了某个字段,造成表单无法再次提交
[转]Java防止非法跟重复表单提交的分析????formhashSession.remove(formhash);
[转]Java防止非法跟重复表单提交的分析????session.setAttribute("formhashSession",?formhashSession);

?

读书人网 >编程

热点推荐