Java防止非法和重复表单提交的分析
来源:互联网 发布:同济医学院知乎 编辑:程序博客网 时间:2024/05/17 00:55
第一,对于不支持POST的,可以简单的使用如下代码
如果是servlet, 可以将doGet方法直接返回,不进行处理就行了
还可以采用特定的标志来区分,比如
程序里这样判断
第二,判断提交的来源referer,代码如下
第三 防止重复提交的hashCode
在表单显示页面
表单里面增加如下字段
在表单提交页面进行如下处理
以上内容为本人原创内容,如要转载,请保留完整信息。并注明来源为http://blog.csdn.net/或http://www.Java2000.net,
if ("POST".equals(request.getMethod())) {
// 正常进行
}else{
// 异常请求
out.print("异常访问");
return;
}
// 正常进行
}else{
// 异常请求
out.print("异常访问");
return;
}
如果是servlet, 可以将doGet方法直接返回,不进行处理就行了
public void doGet(HttpServletRequest request, HttpServletResponse response) {
return;
}
public void doPost(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;
}
// 正常进行
}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;
}
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);
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);
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防止非法和重复表单提交的分析
- Java防止非法和重复表单提交的分析
- Java防止非法和重复表单提交的分析
- Java防止非法和重复表单提交的分析
- Java防止非法和重复表单提交的分析
- Java防止非法和重复表单提交的分析
- Java防止非法和重复表单提交的分析
- Java防止非法和重复表单提交的分析
- JAVA防止重复和非法提交表单
- Java防止非法和重复表单提交的方法
- Java防止非法和重复表单提交的方法
- 防止非法和重复提交
- java中防止表单的重复提交
- Java防止表单重复提交的方式
- java 防止表单重复提交
- java防止表单重复提交
- java 防止表单重复提交
- java防止表单重复提交
- c#学习step by step---------关于main方法
- 管理及营销相关下载
- 增强版JAVA实现文本形式的树状结构显示
- 千万别轻易放弃 财富杂志教你如何应聘国际大公司
- 如何在内存中自定义表用于添加和删除数据
- Java防止非法和重复表单提交的分析
- Windows CE OAL层的结构与开发
- 人物:22年前的天才程序员,今天在干什么?
- 如何使用log4j设置tomcat 5.5版本的的日志功能
- 2008年2月26日碰撞算法
- 微软公布四大战略转变 软件系统走向开放
- JDBC 获得自动生成的字段值
- Servlet 采用 forward 时,页面出现汉字乱码问题的分析
- ADSL无法上网修复心得