日期:2010-09-19  浏览次数:20526 次

Aiyiweb.Com提示:PHP实例:避免反复提交和检查数据来路.

PHP Token(令牌)设计

设计目标:

  1. 避免反复提交数据.
  2. 检查来路,能否是外部提交
  3. 婚配要执行的动作(如果有多个逻辑在同一个页面实现,比如新增,删除,修正放到一个PHP文件里操作)

这里所说的token是在页面显示的时候,写到FORM的一个隐藏表单项(type=hidden).
token不可明文,如果是明文,那就太危险了,所以要采用一定的加密方式.密文要可逆.俺算法很白痴,所以采用了网上一个现成的方法.

如何达到目的:

  1. 怎样避免反复提交?
    在SESSION里要存一个数组,这个数组存放以经成功提交的token.在后台处理时,先判断这个token能否在这个数组里,如果存在,说明是反复提交.
  2. 如何检查来路?
    可选项,这个token在生成的时候,加入了当前的session_id.如果别人copy你的html(token一迸copy),在提交时,理论上token里包含的session_id不等于当前session_id,就可以判断这次提交是外部提交.
  3. 如何婚配要执行的动作?
    在token的时候,要把这个token的动作名称写进这个token里,这样,在处理的时候,把这个动作解出来进行比较就行了.

我以前写的GToken不能达到上面所说的第二条,今天修正了一下,把功用2加上了.团体感觉还行.