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