Не у кого не возникают проблемы с csrf? а именно не проходит валидация токена, бывают следующие варианты
1. нет куки с csrf токеном, сессионные и другие куки при этом есть, причина почему их нет не ясна
2. куки есть но не валидные
откровенные попытки взлома не в счет, проблемы у обычных пользователей и все это в основном на мобильниках, за сутки не менее сотни ошибок.
Воспроизвести у себя ну никак не получается, может кто сталкивался?
не проходит валидация csrf
Re: не проходит валидация csrf
не уверен, что мысль верная, но предположу, что проблема со сроком жизни сессии или токена.
попробовать воспроизвести с мобильного в плохой зоне доступа и/или со сменой базовых станций между запросами к серверу.
попробовать воспроизвести с мобильного в плохой зоне доступа и/или со сменой базовых станций между запросами к серверу.
Re: не проходит валидация csrf
подсознательно тоже предположение что связано со сроком, но объяснить ситуацию что сессионные куки есть а куки с токеном нет при том что обе куки выставляются на сессию.
подобные проблемы судя по поиску возникают, но видимо народ не заворачивается сильно.
Повторить все еще не получается.
подобные проблемы судя по поиску возникают, но видимо народ не заворачивается сильно.
Повторить все еще не получается.
Re: не проходит валидация csrf
Разбираясь с не удобствами которые доставляет защита от csrf.
Для начала сравнение (смотрел очень поверхностно, возможно есть не точности)
Laravel - хранить токен в сессии при этом выставляет не защищенную куки чтобы можно было её считывать при необходимости (аналог то что в Yii выставляет как мета тэги)
Symfony - хранит токен в сессии, судя по issue есть в планах реализовать хранение в куках.
В Yii2 есть возможно как использовать сессию так и хранить в куках (за это отвечает параметр enableCsrfCookie) , в поисках решения проблемы первого поста как эксперимент переключился на хранение токена в сессии в итоге проблем стало не меньше:
- если время жизни сессии истекло (долго открыта вкладка у пользователя) то csrf становится не валидным
- в принципе тоже самое, допустим используется автовход, сессия закончилась при этом у пользователя была открыта форма, пользователь отправляет форму, сессия восстанавливается из куки но валидация csrf не проходит т.к. токен обновился
Плюсов и минусы хранения токена в сессии:
+ увеличивается безопасность (так указано в руководстве)
- доп нагрузка на сервер т.к. нужно стартовать сессию на каждый запрос а том числе если это например googlebot, с учетом того что токен выставляется и в мета теги сессия нужна будет на любую страницу даже если на странице нет формы для отправки данных.
+ на одну куку меньше
Для бэкенда неверно лучший вариант хранить токен в сессии, а проблему истечения срока жизни сессии решать через реализацию Lock Screen.
Для фронтенда решения я не нашел, для Laravel и Symfony есть обсуждения проблемы истечения сессии и не валидного токена но четкого решения нет.
Хранение токена в куки вроде как решает проблему времени жизни сессии но причину возникновения проблемы указанной в первом посте я не нашел.
Не нашел более менее активного обсуждения этого вопроса. Неужели ни у кого возникали такие вопросы?
В Yii2 думаю будет правильным сделать отдельное исключение на csrf чтобы его можно было отлавливать.
Для начала сравнение (смотрел очень поверхностно, возможно есть не точности)
Laravel - хранить токен в сессии при этом выставляет не защищенную куки чтобы можно было её считывать при необходимости (аналог то что в Yii выставляет как мета тэги)
Symfony - хранит токен в сессии, судя по issue есть в планах реализовать хранение в куках.
В Yii2 есть возможно как использовать сессию так и хранить в куках (за это отвечает параметр enableCsrfCookie) , в поисках решения проблемы первого поста как эксперимент переключился на хранение токена в сессии в итоге проблем стало не меньше:
- если время жизни сессии истекло (долго открыта вкладка у пользователя) то csrf становится не валидным
- в принципе тоже самое, допустим используется автовход, сессия закончилась при этом у пользователя была открыта форма, пользователь отправляет форму, сессия восстанавливается из куки но валидация csrf не проходит т.к. токен обновился
Плюсов и минусы хранения токена в сессии:
+ увеличивается безопасность (так указано в руководстве)
- доп нагрузка на сервер т.к. нужно стартовать сессию на каждый запрос а том числе если это например googlebot, с учетом того что токен выставляется и в мета теги сессия нужна будет на любую страницу даже если на странице нет формы для отправки данных.
+ на одну куку меньше
Для бэкенда неверно лучший вариант хранить токен в сессии, а проблему истечения срока жизни сессии решать через реализацию Lock Screen.
Для фронтенда решения я не нашел, для Laravel и Symfony есть обсуждения проблемы истечения сессии и не валидного токена но четкого решения нет.
Хранение токена в куки вроде как решает проблему времени жизни сессии но причину возникновения проблемы указанной в первом посте я не нашел.
Не нашел более менее активного обсуждения этого вопроса. Неужели ни у кого возникали такие вопросы?
В Yii2 думаю будет правильным сделать отдельное исключение на csrf чтобы его можно было отлавливать.