|
发表于 2012-12-13 10:16:42
|
显示全部楼层
另一种办法是废除ci的csrf,自己在扩展控制器(MY_controller)的构造函数或者_remap函数里自己构建,主要参考csrf过程,里面有自定义的加密函数和输出函数,控制器属性data会在输出视图时被输出。
PHP复制代码
public function _remap ($method = NULL, $params = array())
{
$go = TRUE;
//自建跨站请求防御以取代CI的并不方便也不十分安全的跨站请求防御
if(empty($_COOKIE['token']))
{
$uniqid = uniqid();
setcookie('token',$uniqid);
}
else
{
$uniqid = $_COOKIE['token'];
}
if(!empty($_POST))
{
$token = $this->input->get_post('token');
if($token === saltedhash ($_COOKIE['token'],$token))
{
$go = TRUE;
if(!is_ajax ())
{
//$uniqid = uniqid();
setcookie('token',uniqid());
}
}
else
{
$go = FALSE;
show_error ('Your request is not allowed.');
}
}
$this->data['token'] = saltedhash ($uniqid);
if($go)
{
if (!empty($method) && method_exists($this, $method)) call_user_func_array(array($this, $method), $params);
$this->__output ();
}
}
复制代码 |
|