Мое приложение ASP.NET MVC предотвращает CSRF-атаки, используя атрибут ValidateAntiForgeryToken и вызывая Html.AntiForgeryToken, чтобы написать скрытый элемент ввода со значением токена, а также поместить токен в файл cookie.
Мой журнал исключений сообщает о случаях возникновения исключения HttpAntiForgeryException, которые выглядят так, как будто они были вызваны действительными запросами (реферер выглядит правильно). Ответ, вызывающий исключение, также содержит __RequestValidationToken в поле формы со значением токена. Однако в запросе отсутствует необходимый файл cookie, что приводит к сбою проверки и возникновению исключения.
Я пытаюсь понять, почему этот cookie отсутствует, и нашел следующие возможные причины:
- Коллекция печенья заполнена для
домен. - Если бы это было так
здесь я ожидаю увидеть 20/50 печенье
в каждом запросе (кстати, все
Агентами пользователя являются IE7 и IE8) и
каким-то образом печенье сбрасывается.
Я вижу от 3 до 23 печенье
в различных случаях
исключение
- Предел данных куки был
достиг. - Этого не происходит. От
глядя на бревна, я вижу
коллекция печенья мала.
- Ответ отправляется обратно
прежде чем печенье может быть добавлено. -
Не уверен насчет этого. Вручную
вызов Reponse.Flush в голову
приводит к исключению, заявляющему
Коллекция куки не может быть изменена
после отправки ответа.
-
В отчаянии я обращаюсь к людям в SO и спрашиваю о любых других возможных причинах этого пропавшего cookie, которые я могу расследовать.