Защита от CSRF: нужно ли создавать токен для каждой формы? - PullRequest
26 голосов
/ 28 декабря 2011

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

Ответы [ 2 ]

33 голосов
/ 28 декабря 2011

Как правило, достаточно иметь один токен на сессию , так называемый токен на сессию :

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

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

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

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

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

11 голосов
/ 28 декабря 2011

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

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

...