Насколько я понимаю, есть два подхода в области защиты от CSRF атак: 1) знака на сессию, и 2) маркера по запросуПочему Express/Connect генерирует новый токен CSRF для каждого запроса?
1) В первом случае CSRF маркер генерируются только один раз когда сеанс пользователя инициализируется. Таким образом, для пользователя есть только один действительный токен.
2) Во втором случае для каждого запроса создается новый токен CSRF, после чего старая становится недействительной. Это усложняет использование vunerability, потому что даже если злоумышленник крадет токен (через XSS) , он истекает, когда пользователь переходит на следующую страницу. Но, с другой стороны, этот подход делает использование Webapp менее полезным. Вот хорошая цитата из security.stackexchange.com:
Например, если они нажмите кнопку «назад» и отправить форму с новыми значениями, представление не будет, а скорее всего, приветствовать их с каким-то враждебным сообщением об ошибке. Если они пытаются открыть ресурс во второй вкладке, они найдут сеанс случайно разбивает в один или оба вкладках
Когда Node.js Express анализируя структуру (которая основана на Connect) Я заметил, что новый Маркер CSRF генерируется по каждому запросу, , но старый не становится недействительным.
Мой вопрос:: В чем причина предоставления нового токена CSRF по каждому запросу, а не для недействительности старого? Почему бы просто не создать один токен за сеанс?
Спасибо и извините за мой английский!
Спасибо за ваш ответ, я очень ценю это. Но он не описывает, какие преимущества имеют несколько действительных токенов по одному действительному токену. – Curious
@ Zub обновил мой ответ. – user568109