Подтвердить что ты не робот

Защита CSRF: нужно ли нам генерировать токен для каждой формы?

Нужно ли нам генерировать токен для каждой формы на веб-сайте? Я имею в виду, каждый раз, чтобы генерировать различный токен для каждой запрошенной формы? Если нет, то почему?

4b9b3361

Ответ 1

В общем, достаточно всего одного токена за сеанс, так называемого токена для каждого сеанса:

В общем, разработчикам требуется только генерировать этот токен один раз для текущего сеанса. После первоначальной генерации этого токена значение сохраняется в сеансе и используется для каждого последующего запроса до окончания сеанса.

Если вы хотите еще больше повысить безопасность, вы можете использовать один токен для каждой формы /URL (маркер для каждой формы), чтобы смягчить воздействие, когда утечка одного токена (например, XSS), поскольку злоумышленник сможет только успешно атаковать эту конкретную форму /URL.

Но используя токены для каждого запроса, т.е. е. токены, которые изменяются с каждым запросом, скорее сокращают удобство использования веб-сайта, так как ограничивают параллельный просмотр:

Чтобы еще больше повысить безопасность этого предлагаемого дизайна, рассмотрите возможность рандомизации маркера CSRF [...] для каждого запроса. Внедрение этого подхода приводит к генерации токенов для каждого запроса, в отличие от токенов для каждого сеанса. Обратите внимание, однако, что это может привести к проблемам удобства использования. Например, функция браузера кнопки "Назад" часто препятствует, поскольку предыдущая страница может содержать токен, который больше недействителен. Взаимодействие с этой предыдущей страницей приведет к ложному положительному событию безопасности CSRF на сервере.

Поэтому я рекомендую вам использовать токены для каждого сеанса или токены для каждой формы.

Ответ 2

Нет, вам просто нужно создать токен для каждого сеанса.

Токены очень маловероятны, чтобы случайно просочиться от пользователей, и генерация токена в форме делает вещи очень сложными, если пользователь просматривает сайт в двух разных вкладках/окнах одновременно.