第一,对于不支持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,
分享到:
相关推荐
Java表单重复提交是Web开发中常见的问题,可能导致数据不一致和系统异常。要理解这个问题,首先要明白表单提交的基本流程:用户打开表单页面,填写信息,然后点击提交按钮,浏览器向服务器发送请求,服务器处理请求...
在多步骤的表单提交过程中,如果用户在完成某个步骤后选择后退并重新提交,可能会导致之前步骤中的数据丢失或覆盖。例如,在投票系统中,用户在完成投票后返回上一步并重新投票,会导致投票结果出现偏差。 #### 三...
2. **Token验证**:当接收到表单提交请求时,先检查Token是否有效。 ```java if (!this.isTokenValid(request) && (int) state > 0) { this.saveToken(request); } else { // 处理业务逻辑 session....
1. **在表单提交前生成令牌**: ```java saveToken(request); ``` 2. **在提交表单的方法中验证令牌**: ```java if(!isTokenValid(request)){ ActionMessages errors = new ActionMessages(); errors.add(...
本文分析了现有的处理方式的不足,讨论了如何通过基于会话的服务器令牌和基于请求的客户令牌,有效防止刷新处理,避免数据的重复提交。 一、表单提交数据的安全问题 在 Java Web 应用系统中,通过表单提交数据是一...
1. **使用统一的方法**:为所有涉及表单提交的Action创建统一的方法来处理令牌的生成和验证。 2. **错误处理**:对于验证失败的情况,应该给出明确的错误提示,告知用户发生了什么问题。 3. **避免使用GET方式提交**...
在Web应用开发中,表单校验是非常重要的环节之一,能够有效防止非法数据的提交,提高系统的安全性与稳定性。Struts2提供了一套完整的表单校验机制,包括但不限于客户端验证、服务器端验证以及自定义验证规则等。 ##...
如果不匹配或者令牌不存在,那么表单提交将被拒绝,以此来防止重复提交或非法请求。 4. **令牌回退**:当表单提交成功后,为了防止用户意外刷新页面导致重复提交,Struts2会清除服务器会话中的令牌。这种行为称为...
在IT行业中,验证码验证功能是网站和应用程序安全的重要组成部分,它可以防止恶意自动化脚本或机器人进行非法操作。本文将深入探讨如何使用Java编程语言来实现验证码验证,主要涉及Servlet、session以及画板对象等...
1. **网页登录**:有些网站需要登录才能访问,Java爬虫需要模拟登录过程,可能涉及POST提交表单、处理验证码等。 2. **动态加载内容**:现代网页常使用AJAX技术,部分内容动态加载,需使用Selenium、Puppeteer等...
- 为了防止重复刷新导致验证码改变,可以使用`session`对象存储当前的验证码内容,同时在客户端通过JavaScript获取图片的`src`,并在表单提交时一并发送验证码值。 4. **验证过程** - 客户端输入验证码后,将其值...
系统可能利用jQuery进行表单提交和数据验证,确保信息完整且符合规范。同时,系统通过邮箱验证机制来增加安全性,防止恶意注册或误操作。这里会用到邮件注册的功能,系统向考生提供的邮箱发送一封包含UUID(无重复的...
- 将接收到的二进制数据保存为图片文件,可能需要对文件名进行处理,避免重复或非法字符。 - 记录上传信息,如文件名、上传时间、文件大小等。 - 返回一个JSON或HTML响应,告知前端上传结果,包括成功或失败信息...
- POST请求:当需要提交表单数据时,如登录网站,会使用POST请求。 4. **多线程**: - 为了提高爬虫效率,通常会使用多线程并发抓取不同网页,但要注意控制并发量,避免对目标网站造成过大压力。 5. **爬虫策略*...
在IT领域,表单验证是Web开发中的一个关键环节,其主要目的是确保用户提交的数据有效、完整且符合预设的规则,从而维护数据的完整性和准确性。"经典表单验证.rar"这个压缩包文件,根据其标题和描述,很可能是包含了...
在本系统中,JSP用于展示注册和登录表单,以及处理表单提交后的结果展示。 4. **MD5加密**:MD5(Message-Digest Algorithm 5)是一种广泛使用的哈希函数,可以将任意长度的数据转化为固定长度的摘要。在用户注册时...
同时,表单提交时会携带用户的验证码输入,以便于Servlet进行验证。 总结,Java验证码制作涉及了字符串生成、图像处理以及服务器与客户端的交互等多个环节。通过学习以上步骤,开发者可以更好地理解验证码的实现...
1. 表单提交:创建一个包含验证码输入框的表单,用户需要输入看到的验证码。 ```html 提交"> ``` 2. 验证码验证:在`SubmitServlet`中,获取用户输入的验证码并与session中的验证码进行比较。 ```java ...
Java汉字验证码是一种用于验证用户身份的安全机制,常用于防止恶意自动化程序(如机器人)进行非法操作,例如注册、登录或提交表单。在本话题中,我们将深入探讨如何使用Java来实现汉字验证码的生成和验证。 1. **...
- 表单提交:用户选择投票选项后,通过POST请求将数据提交到服务器。 7. **安全性考虑**: - 防止SQL注入:使用预编译语句或参数化查询来避免恶意输入影响数据库。 - 用户验证:可能有登录系统以防止重复投票或...