Я пытаюсь защитить свой веб-сайт .NET от атак CSRF, используя скрытый ключ в каждой форме и специальный файл cookie temp, поэтому, когда пользователь POST формы, я могу сравнить временный файл cookie и скрытый ключ в форме.Подход к защите CSRF
Но я не хочу использовать Session
или другой общий объект, чтобы сохранить эти ключи временные, так что я придумал так:
- браузер попросить форму (GET).
- Приложение генерирует ключ, [userId] + [currentDateTime], симметрично зашифрован ключом, который знает мое приложение .
- Приложение поместило этот ключ в скрытое поле в форму и отправил куки-файл с этим ключом. Браузер отправляет форму.
App гарантирует, что:
- Значение печенья и скрытое значение формы одинаковы.
- Может получить [userId] из дешифрованного значения, и это текущий идентификатор пользователя.
- Может получить [DateTime] из дешифрованного значения.
- [DateTime] получен не более 15 минут.
В противном случае отклонить POST и показать ошибку.
Вы видите недостаток?
С уважением.
Почему вы просто не используете «UserKey»? –