令牌验证,表单提交问题

今天在翻thinkphp文档时发现了令牌验证功能,觉得有点意思,于是扩展学习了一些,在此做一下总结。

令牌验证就是标识符匹配。当用户请求一个表单页面时,服务器会生成一个令牌Token(一般是一串字符)并保存在session里。然后将表单页面返回给用户,同时这个Token也附在了表单中,作为一个隐藏域。

当用户填完表单,点击提交时。服务器收到提交过来的数据,首先会从中拿出Token域数据,将之与该用户在服务器session里的Token值做比较。当二者一致时,服务器才确认这个提交是正常的,然后做进一步处理;否则会直接返回而不做后续处理。

每次验证成功之后,清除该项Token。对于每次的表单页面请求都生成新的Token。

在Struts中就有这样的令牌验证机制:
Struts的Token(令牌)机制能够很好的解决表单重复提交的问题,基本原理是:服务器端在处理到达的请求之前,会将请求中包含的令牌值与保存在当 前用户会话中的令牌值进行比较,看是否匹配。在处理完该请求后,且在答复发送给客户端之前,将会产生一个新的令牌,该令牌除传给客户端以外,也会将用户会 话中保存的旧的令牌进行替换。这样如果用户回退到刚才的提交页面并再次提交的话,客户端传过来的
令牌就和服务器端的令牌不一致,从而有效地防止了重复提交的发生。

 

这个验证在处理伪造表单提交或者表单重复提交时,比较有效。

 

 

文章来源:http://hi.baidu.com/bsbgong/blog/item/9dc75150ab0f68788435248c.html

posted @ 2011-11-21 01:20  永哥  阅读(1479)  评论(0编辑  收藏  举报