使用Cakephp Security Component和默认的get参数

时间:2015-12-04 16:47:07

标签: security cakephp get cakephp-2.x

我遇到CakePHP的安全组件问题。我的网站有一个默认的get参数来处理不同的语言。我已覆盖redirect function中的默认AppController,以便每次重定向或发布时,我都会将语言获取参数添加到网址。

这一切都很好,现在我正在尝试实现CakePHP的安全组件。可以想象,问题是安全组件阻止了我尝试删除某些数据库条目的尝试因为get参数:(The request has been black-holed...)

所以我的问题是,有什么方法可以使用我的get参数的安全组件。我正在考虑将某些参数列入白名单的想法。

提前致谢。

1 个答案:

答案 0 :(得分:0)

我最终找到了解决问题的方法。我不知道这是否是最好的方式,但也许它仍然可以帮助某人...所以首先澄清一下:我的请求是黑洞(form validation error, or a controller/action mismatch error)因为我已经在我的语言中获得了参数生成安全令牌后的AppController。

我可以通过在lib/Cake/View/Helper/中对CakePHP的默认FormHelper进行一些更改来解决这个问题。在我的情况下,我只需要在postLink函数中添加几行:

if (isset($this->request->query['lng']) && in_array($this->request->query['lng'], array('eng', 'de', 'ru')) {

    $lng = Sanitize::paranoid($this->request->query['company'], array('!','\'','?','_','.',' ','-', '['));

    if(is_array($url) && !isset($url['?'])){
       $url['?'] = array('lng' => $lng);
    }
}

$formUrl = $this->url($url);

所以我在这里做的是:

首先,我检查了是否给出了名为'lng'的请求查询参数, 然后经过一些安全检查(in_array()Sanitize::paranoid)后,我只需要将此参数添加到$url数组中。