+ -
当前位置:首页 → 问答吧 → 用Snoopy类给THINKPHP框架的网站远程POST数据 令牌验证总是为真?

用Snoopy类给THINKPHP框架的网站远程POST数据 令牌验证总是为真?

时间:2011-11-14

来源:互联网

PHP code

//SnoopyPOST数据方法
public function index()
    {
      $temp=new Snoopy();
      $temp->fetch("http://sadasdad");
      $userpass=array('user'=>'123','password'=>'456');
      dump($userpass);
      $temp->submit("http://sadasdad/index.php/Index/login",$userpass);
      print_r($temp->results);
      $title="Snoopy GO!";
          $this->display();
    }



PHP code

//接受远程POST数据的代码块

      public function login()
    {
        S('islogin',0);
        $Demo=D('User');
        $temp=$Demo->create();
        echo $Demo->autoCheckToken($_POST);
        dump($temp);
        if(($_POST["user"]=="123")&&($_POST["password"]=="456"))
        {
        
            S('islogin',1,300);
    
        }
        
    }
 



PHP code

//结果
array(2) {
  ["user"] => string(3) "123"
  ["password"] => string(3) "456"
}//Snoopy类传送数据
1//验证为真
array(2) {
  ["user"] => string(3) "123"
  ["password"] => string(3) "456"
}//User实例接收POST数据(成功)



令牌验证失效? 请教大家是什么原因呢?

作者: boldness123   发布时间: 2011-11-14

令牌验证?

作者: ci1699   发布时间: 2011-11-14

引用 1 楼 ci1699 的回复:

令牌验证?


令牌验证
ThinkPHP新版内置了表单令牌验证功能,可以有效防止表单的远程提交等安全防护。
 
表单令牌验证相关的配置参数有:
'TOKEN_ON'=>true, // 是否开启令牌验证
'TOKEN_NAME'=>'__hash__', // 令牌验证的表单隐藏字段名称
'TOKEN_TYPE'=>'md5', //令牌哈希验证规则默认为MD5
 
如果开启表单令牌验证功能,系统会自动在带有表单的模板文件里面自动生成以TOKEN_NAME为名称的隐藏域,其值则是TOKEN_TYPE方式生成的哈希字符串,用于实现表单的自动令牌验证。
 
说明:每刷新一次页面都会重新生成一次隐藏域中的值
 
自动生成的隐藏域位于表单Form结束标志之前,如果希望自己控制隐藏域的位置,可以手动在表单页面添加{__TOKEN__} 标识,系统会在输出模板的时候自动替换。如果在开启表单令牌验证的情况下,个别表单不需要使用令牌验证功能,可以在表单页面添加{__NOTOKEN__},则系统会忽略当前表单的令牌验证。
如果页面中存在多个表单,建议添加{__TOKEN__}标识,并确保只有一个表单需要令牌验证。
模型类在创建数据对象的同时会自动进行表单令牌验证操作,如果你没有使用create方法创建数据对象的话,则需要手动调用模型的autoCheckToken方法进行表单令牌验证。如果返回false,则表示表单令牌验证错误。例如:
$User = M("User"); // 实例化User对象
// 手动进行令牌验证
if (!$User->autoCheckToken($_POST)){
// 令牌验证错误
}

作者: boldness123   发布时间: 2011-11-14