1

我正在将 Rabo OmniKassa(有点像 Paypal)实现到 CakePHP 应用程序中。我已经阅读了 Rabo 手册,我在一个“空”项目(没有安全性)上对其进行了测试,并且一切正常。

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

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

当我只加载没有来自 RaboKassa 的重定向的页面时,它显然会加载,但由于它没有 POST 数据,它实际上并没有做任何事情。

我已经尝试了很多我在互联网上找到的选项,比如

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

$this->Security->csrfCheck = false;

$this->Security->unlockedActions = array(
        'kassareturn' // which is the function the RaboKassa has to return to
    );

但它们似乎都不起作用。

我似乎无法解决这个问题,那么有没有人尝试过这个或类似的东西?

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

我正在使用 CakePHP 2.1.3。

4

1 回答 1

1

我建议您在开始尝试在互联网上某处找到的东西之前先检查官方文档。

POST 数据验证也需要禁用

除了 CSRF 检查之外,还有 POST 数据验证。从外部来源接收 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;
    }
}

也可以看看

从 CakePHP 2.3 开始的 SecurityComponent::$unlockedActions

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

另请参阅http://book.cakephp.org/...disabling-csrf-and-post-data-validation-for-specific-actions

于 2014-06-11T16:02:05.647 回答