我遇到CakePHP的安全组件问题。我的网站有一个默认的get参数来处理不同的语言。我已覆盖redirect function
中的默认AppController
,以便每次重定向或发布时,我都会将语言获取参数添加到网址。
这一切都很好,现在我正在尝试实现CakePHP的安全组件。可以想象,问题是安全组件阻止了我尝试删除某些数据库条目的尝试因为get参数:(The request has been black-holed...)
所以我的问题是,有什么方法可以使用我的get参数的安全组件。我正在考虑将某些参数列入白名单的想法。
提前致谢。
答案 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
数组中。