не проходит валидация csrf

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
raketa
Сообщения: 131
Зарегистрирован: 2011.07.28, 17:29

не проходит валидация csrf

Сообщение raketa »

Не у кого не возникают проблемы с csrf? а именно не проходит валидация токена, бывают следующие варианты
1. нет куки с csrf токеном, сессионные и другие куки при этом есть, причина почему их нет не ясна
2. куки есть но не валидные
откровенные попытки взлома не в счет, проблемы у обычных пользователей и все это в основном на мобильниках, за сутки не менее сотни ошибок.
Воспроизвести у себя ну никак не получается, может кто сталкивался?
dmg
Сообщения: 685
Зарегистрирован: 2012.10.15, 03:09

Re: не проходит валидация csrf

Сообщение dmg »

не уверен, что мысль верная, но предположу, что проблема со сроком жизни сессии или токена.
попробовать воспроизвести с мобильного в плохой зоне доступа и/или со сменой базовых станций между запросами к серверу.
raketa
Сообщения: 131
Зарегистрирован: 2011.07.28, 17:29

Re: не проходит валидация csrf

Сообщение raketa »

подсознательно тоже предположение что связано со сроком, но объяснить ситуацию что сессионные куки есть а куки с токеном нет при том что обе куки выставляются на сессию.
подобные проблемы судя по поиску возникают, но видимо народ не заворачивается сильно.
Повторить все еще не получается.
raketa
Сообщения: 131
Зарегистрирован: 2011.07.28, 17:29

Re: не проходит валидация csrf

Сообщение raketa »

Разбираясь с не удобствами которые доставляет защита от csrf.
Для начала сравнение (смотрел очень поверхностно, возможно есть не точности)
Laravel - хранить токен в сессии при этом выставляет не защищенную куки чтобы можно было её считывать при необходимости (аналог то что в Yii выставляет как мета тэги)
Symfony - хранит токен в сессии, судя по issue есть в планах реализовать хранение в куках.

В Yii2 есть возможно как использовать сессию так и хранить в куках (за это отвечает параметр enableCsrfCookie) , в поисках решения проблемы первого поста как эксперимент переключился на хранение токена в сессии в итоге проблем стало не меньше:
- если время жизни сессии истекло (долго открыта вкладка у пользователя) то csrf становится не валидным
- в принципе тоже самое, допустим используется автовход, сессия закончилась при этом у пользователя была открыта форма, пользователь отправляет форму, сессия восстанавливается из куки но валидация csrf не проходит т.к. токен обновился

Плюсов и минусы хранения токена в сессии:
+ увеличивается безопасность (так указано в руководстве)
- доп нагрузка на сервер т.к. нужно стартовать сессию на каждый запрос а том числе если это например googlebot, с учетом того что токен выставляется и в мета теги сессия нужна будет на любую страницу даже если на странице нет формы для отправки данных.
+ на одну куку меньше

Для бэкенда неверно лучший вариант хранить токен в сессии, а проблему истечения срока жизни сессии решать через реализацию Lock Screen.
Для фронтенда решения я не нашел, для Laravel и Symfony есть обсуждения проблемы истечения сессии и не валидного токена но четкого решения нет.
Хранение токена в куки вроде как решает проблему времени жизни сессии но причину возникновения проблемы указанной в первом посте я не нашел.

Не нашел более менее активного обсуждения этого вопроса. Неужели ни у кого возникали такие вопросы?
В Yii2 думаю будет правильным сделать отдельное исключение на csrf чтобы его можно было отлавливать.
Ответить