Как я могу получить (внешние) данные в 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;
}
}
Смотрите также
- http://book.cakephp.org/2.0/en/core-libraries/components/security-component.html
- http://book.cakephp.org/2.0/en/core-libraries/components/security-component.html
- http://book.cakephp.org/2.0/en/core-libraries/components/security-component.html
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