关于令牌验证的问题,不知道是不是BUG.关注一下

 我来答
黑天使2841
2013-10-10 · TA获得超过3888个赞
知道小有建树答主
回答量:1008
采纳率:100%
帮助的人:2379万
展开全部
- 普通 - 未处理 [i=s] 本帖最后由 siniy 于 2011-11-1 00:13 编辑 [/i] 通常情况下.我们在做后端程序的时候.有时候需要配合前端设计师的需求.有时候.前端设计师设计出来很牛X的样式出来 的时候.如果后台程序因为不支持.就很让人费神了. 我就遇到这么一个问题.关于令牌验证的. THINKPHP的令牌验证确实够 安全.防止远程提交数据.但遇到这么一个问题.就是 一个添加的FORM页面,我们就叫他A页面吧.A页里面已经有一个FORM了. TP也生成了TOKEN验证字段.正常提交.一点问题都没有.有时候.就会遇到这样的情况例如新闻系统.用户可以选择新闻分类.供用户选择.如果系统设计得人性化一点.如果没当前没有分类.可以即时添加分类的.即用AJAX 点击弹出一个添加新闻分类的窗口.页A页面停留在那里.不发生任何地址跳转等.此时弹出的页面里面也有一个FORM.我们就叫这个页面B页面吧..这时.TP会自动更改SESSION的TOKEN的值.注意.此时TP的验证只验证了当前B页面的令牌.页A页面的INPUT 的 TOKEN的值已与服务器的SESSION不匹配了.系统会认为远程提交.提示令牌错误. 原因就在 添加页面引用了公共的类.insert 里面使用了 create 方法. 而令牌验证只是 create 方法中的一个功能而已.如果为了这个而去重写 insert 方法.我个人觉得太累了.于是找办法 . 我看了代码后.感觉可以从代码上面稍做修改.可以解决这个问题. 我们先看 model.class.php 的 create 方法 中有这样的代码 . //表单令牌验证 if(C('TOKEN_ON')&&!$this->autoCheckToken($data)){ $this->error=L('_TOKEN_ERROR_'); returnfalse;}这个代码中对应 的 autoCheckToken //自动表单令牌验证 publicfunctionautoCheckToken($data){ $name=C('TOKEN_NAME'); if(isset($_SESSION[$name])){ //当前需要令牌验证
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式