Почему скрытое поле AntiForgeryToken не совпадает с файлами cookie на моем компьютере? - PullRequest
9 голосов
/ 25 августа 2011

Я только что провел быстрый тест с простым примером ASP.NET MVC 3, изменив форму LogOn по умолчанию. Согласно этой статье , и скрытое поле __RequestVerificationToken, и файлы cookie __RequestVerificationToken_Lw__ должны содержать одно и то же значение, сгенерированное Html.AntiForgeryToken(). Но это не совсем то же самое, когда я получил их в Fiddle, кстати, глядя на исходный код MVC 3, метод GetAntiForgeryTokenAndSetCookie, похоже, не использовал солт-значение для генерации куки. Были ли какие-либо изменения в MVC 3?

Забыл сказать, что я все еще могу успешно войти в систему как с обычным, так и с Ajax-запросом POST.

Вот необработанный журнал из Fiddle:

POST http://localhost:51713/Account/LogOn HTTP/1.1
Referer: http://localhost:51713/Account/LogOn
Content-Length: 256
Origin: http://localhost:51713
X-Requested-With: XMLHttpRequest
Content-Type: application/x-www-form-urlencoded
Cookie: __RequestVerificationToken_Lw__=OIRtVqUvNt/LfDGeoVy3W1VhdKN7MwdbUZmRNScz4NqS4uV0I0vQH2MHg77SsVhcinK5SJi9mVcdBUWk2VMiPTk8EMUN2Zq0X4ucK8XQ3/zr6NoiIvVF73Bq8ahbFaY/IrNrWY7mmzvO9j/XVLNN2lNqgCd6I3UGZAw3/nlOmpA=

__RequestVerificationToken=zeDS%2F8MZE%2BLf%2FrRhevwN51J7bOE3GxlGNLQc8HogwFctF7glU1JboHePTTHa5YFe9%2FD2sY7w167q53gqvcwYZG1iZeecdnO4fdg6URdR4RUR%2BjIgk1apkXoxQ2xg48REfv4N5D4SHKU4MAf30Diy0MVyyF9N2Dl7uUGT6LbKHZU%3D&UserName=Tien&Password=tien&RememberMe=false

Ответы [ 2 ]

5 голосов
/ 08 сентября 2011

с чего вы взяли, что они должны быть одинаковыми?:) Конечно, они должны быть в каком-то смысле сопоставимы, но это не значит, что они должны выглядеть идентично в своей сериализованной форме.Существует различный набор данных, сериализованных в cookie (я думаю, только «соль» и токен) и в разметку HTML (соль, токен, время создания, имя пользователя).

Если вас интересуют подробности, возьмите ILSpyи ищите System.Web.Mvc.AntiForgeryDataSerializer, System.Web.Mvc.AntiForgeryData и OnAuthorization метод System.Web.Mvc.ValidateAntiForgeryTokenAttribute

2 голосов
/ 01 октября 2015

Статья, на которую вы ссылаетесь в своем вопросе, просто неверна, потому что токен защиты от подделки скрытого поля никогда не будет совпадать со значением cookie для защиты от подделки.

Дополнительным значением моего ответа является ссылка к интересной статье , в которой описываются внутренние компоненты токенов ASP.NET.Помимо прочего, в нем предусмотрены четкие этапы декодирования и дешифрования маркера cookie / формы:

BitConverter.ToString(System.Web.Helpers.AntiXsrf.MachineKey45CryptoSystem.Instance.Unprotect(tokenValue))

... и последующие шаги для сопоставления маркеров cookie и формы.

...