关于令牌验证的问题,不知道是不是BUG.关注一下
1个回答
展开全部
- 普通 - 未处理
[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])){
//当前需要令牌验证
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询