使用带有默认 get 参数的 Cakephp 安全组件

Using Cakephp Security Component with default get parameter

我对 CakePHP 的安全组件有疑问。我的网站有一个默认的 get 参数来处理不同的语言。我已经覆盖了 AppController 中的默认值 redirect function,这样每次进行重定向或 post 时,我都会将语言获取参数附加到 URL。

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

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

提前致谢。

我终于找到了解决问题的方法。我不知道这是否是最好的方法,但也许它仍然可以帮助某人......所以首先要澄清一下:我的请求被黑洞 (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 数组。