Защита от CSRF. Насколько правильный подход?
1) создаем токен
2) пишем в сессию
3) добавляем в нужные места во вьюхах. например, hidden-поля в формы или устанавливаем какой-нибудь заголовок, если запросы делаются через AJAX
4) при каждом POST/DELETE/PUT/PATCH запросах проверяем входной токен и токен в сессии. не совпали = пока.
Так как взаимодействие с сервером идет запрос/ответ, то токены позволят только определить, что возможно была подмена. От самой подмены они не спасут.
К примеру вы реализовали:
1. На сервере сгенерировали и сохранили id сессии и токен.
2. Передали на клиент.
3. Клиент делает запрос к серверу и передает id сессии и токен
4. Вы проверяете значение id токена. Если корректен, то генерите новый и сохраняете.
5. Все возвращаете клиенту.
- А теперь пользователь пользовался сайтом и не закрыв сессию ушел. Злоумышленник просто продолжит пользоваться его сессией и токеном. Пока не придет не правильный токен - вы не узнаете.
- Еще проблема. Ушел запрос на сервер с верным токеном, но по какой-то причине не вернулся. Повтор запроса это уже не валидный токен. Также несколько ajax запросов одновременно. Опять не валидный. Проблемы и вам как разработчику, так и пользователю.