В общем случае достаточно иметь только один токен за сеанс , так называемый токен сеанса :
В целом , разработчикам нужно только генерировать этот токен один раз для текущего сеанса. После первоначальной генерации этого токена значение сохраняется в сеансе и используется для каждого последующего запроса до истечения срока действия сеанса.
blockquote>Если вы хотите еще больше повысить безопасность, вы можете использовать один токен на каждую форму / URL ( токен для каждой формы ) для смягчения воздействия, когда утечка одного токена (например, g1] XSS ), поскольку злоумышленник сможет только успешно атакуйте эту конкретную форму / URL.
Но используя токены для каждого запроса , i. е. маркеры, которые меняются с каждым запросом, скорее сокращают удобство использования веб-сайта, так как ограничивают параллельный просмотр:
Чтобы еще больше повысить безопасность этого предлагаемого дизайна, рассмотрите возможность рандомизации токена CSRF [...] для каждого запрос. Внедрение этого подхода приводит к генерации токенов для каждого запроса, в отличие от токенов для каждого сеанса. Обратите внимание, однако, что это может привести к проблемам удобства использования. Например, функция браузера кнопки «Назад» часто препятствует, поскольку предыдущая страница может содержать токен, который больше недействителен. Взаимодействие с этой предыдущей страницей приведет к ошибочному событию безопасности CSRF на сервере.
blockquote>Поэтому я рекомендую вам использовать токены для каждого сеанса или токены для каждой формы.