如何在启用安全性的情况下将(外部)数据获取到CakePHP中?

如何在启用安全性的情况下将(外部)数据获取到CakePHP中?,php,security,cakephp,external,blackhole,Php,Security,Cakephp,External,Blackhole,我正在将Rabo OmniKassa(有点像Paypal)实现到CakePHP应用程序中。我已经阅读了Rabo手册,我在一个“空”项目(没有安全性)上测试了它,所有的工作都很完美 现在我正在实际应用程序中实现它,Rabo OmniKassa发送回我的应用程序的数据存在一些问题——这是由安全组件引起的 安全组件会阻止RaboKassa发送给我的POST数据,因为这可能会对应用程序造成威胁(外部服务器插入数据等)。它正在返回一个黑洞 当我只是加载页面而没有来自RaboKassa的重定向时,它显然是加

我正在将Rabo OmniKassa(有点像Paypal)实现到CakePHP应用程序中。我已经阅读了Rabo手册,我在一个“空”项目(没有安全性)上测试了它,所有的工作都很完美

现在我正在实际应用程序中实现它,Rabo OmniKassa发送回我的应用程序的数据存在一些问题——这是由安全组件引起的

安全组件会阻止RaboKassa发送给我的POST数据,因为这可能会对应用程序造成威胁(外部服务器插入数据等)。它正在返回一个黑洞

当我只是加载页面而没有来自RaboKassa的重定向时,它显然是加载的,但是因为它没有POST数据,所以它实际上没有做任何事情

我在网上找到了很多选择,比如

$this->Components->disable('Security');

但它们似乎都不起作用

我似乎无法解决这个问题,所以有没有人曾经尝试过这个或类似的方法

我无法更改RaboKassa,所以我必须接收POST数据


我使用的是CakePHP 2.1.3。

我建议,在开始尝试在互联网上找到的东西之前,一定要先查看官方文档

后期数据验证也需要禁用 除了CSRF检查外,还有后期数据验证。从外部来源接收POST数据时,必须禁用这两种检查

$this->Security->csrfCheck = false;
$this->Security->validatePost = false;
别忘了确保你只是为了你的具体行动才禁用它

public function beforeFilter() {
    parent::beforeFilter();

    if($this->request->params['action'] === 'kassareturn') {
        $this->Security->csrfCheck = false;
        $this->Security->validatePost = false;
    }
}
另见

SecurityComponent::$unlockedActions(自CakePHP 2.3起) 我想您会注意到,一旦您将CakePHP安装更新到至少2.3.x,使用
SecurityComponent::$Unlockdactions将神奇地开始工作,因为此功能仅在CakePHP 2.3中可用


另请参见

谢谢,这起作用了!不幸的是,我不能更新CakePHP,因为我在一家使用这个特定版本的公司实习。
$this->Security->csrfCheck = false;
$this->Security->validatePost = false;
public function beforeFilter() {
    parent::beforeFilter();

    if($this->request->params['action'] === 'kassareturn') {
        $this->Security->csrfCheck = false;
        $this->Security->validatePost = false;
    }
}