表单重复提交问题。

在网站中有很多地方都存在表单重复提交的问题,如用户在网速慢的情况下可能会重复提交表单,又如恶意用户通过程序来发送恶意请求等,这时都需要设计一个防止表单重复提交的机制。

要防止表单重复提交,就要标识用户的每一次访问请求,使得每一次访问对服务端来说都是唯一确定的。为了标识用户的每次访问请求,可以在用户请求一个表单域时增加一个隐藏表单项,这个表单项的值每次都是唯一的token,如:

<form id="form" method="post">
    <input type=hidden name="crsf_token" value="xxxx" />
</form>

当用户在请求时生成这个唯一的token时,同时将这个token保存在用户的Session中,等用户提交请求时检查这个token和当前的Session中保存的token是否一致。如果一致,则说明没有重复提交,否则用户提交上来的token已经不是当前这个请求的合法token。去工作过程如下图所示。

上图是用户发起的对表单页面的请求过程。生成唯一的token需要一个算法,最简单的就是可以根据一个种子作为key生成一个随机数,并保存在Session中,等下次用户提交表单时做验证。验证表单的过程如下图所示。

当用户提交表单时会将请求时生成的token带回来,这样就可以和在Session中保存的token做对比,从而确定这次表单验证是否合法。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值