Token拦截表单重复提交失效

最近在做项目遇到表单重复提交的问题,前后端完全分离的项目,采用的的是基于Token注解+拦截器的方式解决的,大概的思路是:

1、前端先请求后台一个方法,后台生成token并保存在session中,然后再将token返回给前端。

2、前端填充表单数据 带上token一并提交给后台

3、后台比对session中的token和前台传过来的token,若一致则成功提交,然后后台销毁session中的token,若不一致则提示重复提交表单

 

此方法能够拦截住普通的重复提交问题,但是如果用户恶意伪造token依旧能重复提交,恶意伪造的大概流程是这样的:

1、前端正常请求一个页面(A页面),后台生成token保存在session中,并将token返回给前端(A页面)

2、前端带上A页面接收到的token能成功提交表单,提交后,此时session中token已经被销毁

3、用户通过浏览器回退到已经提交的表单页面(A页面),企图再次提交表单(此时如果再次提交会被拦截,因为session中的token已经被销毁)

4、如果用户重新打开一个窗口,进入一个表单页面(B页面),此时后台会重新生成一份token保存在session中,并返回给前端页面

5、如果用户将A页面(已提交的表单)的token改为B页面接收到的最新的有效token,并一起提交,此时验证依旧能通过,但是系统中产生了脏数据。

本人测试的token对于同一个用户是公共的变量,所有的表单共用token,有没有基于表单的,进入一个表单后会生成一个唯一的token,这样再也伪造不了了,不知道各位有什么更好的解决方案

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值