Какой подход генерировать разные AntiForgeryToken для каждого пользователя - PullRequest
3 голосов
/ 02 января 2012

Я использую MVC3 с движком Razor.

Мне нужно создать отдельный AntiForgeryToken для каждого пользователя.

Я думаю о генерации уникального значения соли и сохранении его в таблице пользователей при регистрации пользователей и использовании этой соли для генерации токена, но как мне обойти это значение соли с атрибутом ValidateAntiForgeryToken. Я думаю, что мне нужно определить настраиваемый атрибут, но я не знаю, как это будет происходить (с получением доступа к пользовательской информации для использования значения соли).

Заранее спасибо.

Ответы [ 2 ]

5 голосов
/ 02 января 2012

Если вам нужна другая соль, вам нужно будет откатить свою собственную от существующего кода или придумать новую схему.

Однако имейте в виду, что эти токены уже зависят от пользователя. Кто-то вошел в систему как пользователь A и не может использовать токен из сеанса пользователя B.

Также обратите внимание, что они не являются одноразовыми токенами, так что вы пытаетесь предотвратить здесь? Сделать так, чтобы пользователь A не мог сгенерировать его для пользователя b? еще раз - имейте в виду, что пользователь a не вошел в систему как пользователь b, поэтому проверка, которая в данный момент выполняется, не будет выполнена, если она подделана.

1 голос
/ 02 января 2012

Вот очень похожий вопрос с отличным решением:
загрузка значения ValidateAntiForgeryToken во время выполнения

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

Еще одна замечательная вещь в этом решении: атрибут можно применять на уровне контроллера, автоматически применяя ко всем методам POST.

Однако , как уже говорили другие, реализация MVC AntiForgeryToken уже использует имя пользователя при создании токена, поэтому, если у вас нет скрытых мотивов, выполнение этого ничего вам не даст.

...