Недопустимый токен CSRF в приложении symfony2 с балансировкой нагрузки - PullRequest
7 голосов
/ 09 февраля 2012

Я унаследовал проект symfony2, который в реальной среде работает на более чем 2 серверах с балансировкой нагрузки. Сеанс хранится в базе данных mysql, которую приложение использует по этой причине.

Проблема, с которой я сталкиваюсь, заключается в том, что в формах с защитой CSRF иногда токен возвращается неверно. Я предполагаю, что это потому, что сервер, который сгенерировал токен, не всегда является сервером, который получает форму POST и не может соответствовать отправляемому токену.

Я очень, очень новичок в Symfony и попробовал несколько разных решений для генерации токена с использованием сеанса и SessionCsrfProvider из инфраструктуры Symfony.

Может ли кто-нибудь указать мне правильное направление или у меня была похожая проблема?

1 Ответ

2 голосов
/ 12 февраля 2012

CsrfProviders сгенерирует токены путем конкатенации секретного ключа (из параметров .ini) + намерения (по умолчанию ноль) + идентификатор сеанса .

По умолчанию Symfony настроен на использование SessionCsrfProvider, который использует сеанс storage id.

Если вы используете объект PDOSessionStorage или NativeSessionStorage, он вернет session_id().

Это может означать, что ваш session_id() не совпадает в зависимости от того, какая машина обрабатывает запрос.

...