Добрый день.
Прочитав несколько статей про DSC, появились следующие вопросы:
1.Имеет ли смысл генерить csrf токен на каждый запрос от клиента или всё же ограничиться временем жизни куки аутентификации для csrf токена, то есть при логине пользователя устанавливать ему токен, а не при каждом запросе?
2.Не совсем понимаю зачем нужно отправлять токен и в куке и в ответе, ведь если на сайте присутствует XSS, то злоумышленник может прочитать токен прямо из html и флаг httponly тут не спасёт?
3.Если токен обновлять при каждом запросе, и хранить его в html(как скрытое поле формы или в теге meta), то возникают проблемы с multi-tab, так как при открытых двух и более вкладках запросы на 2-й обновляют куку в 1-й, но не обновляют сопряжённый токен в html 1-й вкладки, поэтому при попытке что-то отправить из 1-й вкладки запрос будет не легитимный для сервера. Назревает вопрос, является ли допустимой практикой использовать связку для токена cookie + localStorage для синхронизации вкладок, а не cookie + html, ведь согласно Same Origin Policy злоумышленник не имеет доступа к localStorage?
4.Если токен обновлять при каждом запросе, то какое время жизни для него будет предпочтительно?
Сross Site Request Forgery - да вот зачем. В идеале этот токен генерируется каждый раз для отдельной формы. Он нужен для проверки не бот ли приехал, а если и бот то заходил ли на страницу. В общем, несколько сомнительная версия CORS, но от любознательных новичков спасает
Если токен генерировать для каждой формы, то и куки следует сохранять для каждой формы, иначе, что сравнивать на сервере. Я не до конца понимаю почему его многие советуют вставлять в каждую форму, если можно сделать один и обновлять при каждом запросе в теге meta(может возникнуть проблема с multi-tab, как описано выше) или в localStorage
Это защита. Какая-никакая. Предназначена в целом для гарантии что человек зашёл на эту страницу, а потом отправил форму. Чтобы не давать скриптам отправлять данные