Как я могу получить (внешние) данные в CakePHP с включенным Security?

Я внедряю Rabo OmniKassa (который немного похож на Paypal) в приложение CakePHP. Я прочитал руководство Rabo, я протестировал его на "пустом" проекте (без безопасности), и все это отлично работало.

Сейчас я реализую его в реальном приложении, и есть некоторые проблемы с данными, которые Rabo OmniKassa отправляет обратно в мое приложение, - которые вызваны компонентом безопасности.

Компонент Security блокирует POST-данные, которые посылает мне RaboKassa, поскольку это может представлять угрозу для приложения (вставка данных на внешний сервер и т. Д.). Это возвращает черную дыру.

Когда я просто загружаю страницу без перенаправления из 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.

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;
    }
}

Смотрите также

SecurityComponent:: $ unlockedActions от CakePHP 2.3

Я думаю, вы заметите, что с помощью SecurityComponent::$unlockedActions волшебным образом начнет работать после того, как вы обновите установку CakePHP по крайней мере до 2.3.x, так как эта функция доступна только с CakePHP 2.3

Смотрите также http://book.cakephp.org/...disabling-csrf-and-post-data-validation-for-specific-actions

Другие вопросы по тегам