Хорошо, вот мой лучший снимок.
1) Внутренне mvc использует криптографические методы RNG для создания 128-битной строки, действующей в качестве токена XSRF. Эта строка хранится в файле cookie, а также в скрытом поле где-то в форме. Кажется, что имя файла cookie имеет вид __RequestVerificationToken + версия пути приложения в кодировке Base 64 (на стороне сервера). HTML-часть этого использует AntiForgeryDataSerializer для сериализации следующих фрагментов данных
- поваренная соль
- значение (строка токена)
- галочки даты создания
- имя пользователя (похоже на Context.User)
Метод validate в основном десериализует значения из файла cookie и из формы и сравнивает их на основе значений (salt / value / ticks / username).
2/3) Я думаю, что это обсуждение больше для того, когда использовать токены XSRF, а когда нет. На мой взгляд, вы должны использовать это в каждой форме (я имею в виду, почему нет). Единственное, что я могу думать о том, что это не защищает, это то, что вы действительно нажали соответствующую форму или нет. Зная кодировку base64 имени приложения, злоумышленник сможет просматривать cookie во время атаки XSRF. Возможно, моя интерпретация этого неверна.
4) Не уверены, что именно вы ищете здесь? Я думаю, я бы создал механизм, в котором я попытался бы сохранить токен XSRF в сеансе (если он уже был доступен), а если нет, то попытался бы использовать подход cookie. Что касается типа используемого шифрования, я обнаружил, что это так artcile.
Плюсы и минусы RNGCryptoServiceProvider