我花了几周的时间在我的表单上进行双重保护。 Straightup,存储令牌的会话方法不起作用。
会话可以很好地刷新页面或有人回顾他们的历史......但是通过多次单击按钮的经典双提交无法使用会话来阻止。
我认为脚本不能足够快地检查/写入/删除会话,以便在相互之间的毫秒内处理多次点击时捕获错误。
是否有其他服务器端方法来防止此问题?
答案 0 :(得分:3)
您似乎需要一个能够避免竞争条件的独立令牌存储。为了实现这一点,我们提供了几种解决方案,其中一种更容易实现:
microtime()
,甚至可能是进程ID或哈希值,只要它确保在彼此之间开始的类似进程中是唯一的。UPDATE tokens SET claimid = <id> WHERE tokencode=tokencode AND claimid IS NULL