KB2418241, KB2416473 и KB2416451 все ссылки http://www.microsoft.com/technet/security/bulletin/MS10-070.mspx
После установки этих исправлений на наши машины с Windows Server 2003 в прошлую пятницу, мы стали получать значительно больше ошибок такого рода:
System.Web.Mvc.HttpAntiForgeryException: A required anti-forgery token was not
supplied or was invalid. ---> System.Web.HttpException: Validation of viewstate MAC
failed. If this application is hosted by a Web Farm or cluster, ensure that <machineKey>
configuration specifies the same validationKey and validation algorithm. AutoGenerate
cannot be used in a cluster. ---> System.Web.UI.ViewStateException: Invalid viewstate.
Настройка выглядит следующим образом:
Для метода проверки задано значение «SHA1», а для метода дешифрования - «AES».
(Более того, никаких повторных развертываний приложений не производилось задолго до того, как были установлены обновления Microsoft).
Эти ошибки, конечно, могут быть вызваны реальными CSRF-атаками, но я считаю это маловероятным, учитывая объем и всплеск, связанный с установкой обновлений.
Есть ли какие-либо известные проблемы с этим обновлением, которые могут быть причиной этого? (а еще лучше, какие обходные пути?)
Эта проблема действительно была вызвана обновлением безопасности. Обновление изменило способ проверки путем дополнительной подписи зашифрованных данных. Это включает файл cookie AntiForgeryToken.
Если пользователь перезапускает свой браузер или иным образом очищает все файлы cookie сеанса, проблема исчезает.
Это также было отмечено в комментарии на http://weblogs.asp.net/scottgu/archive/2010/09/27/asp-net-security-update-shipping-tuesday-sept-28th.aspx
After installing the patch, I was quite freaked out to find requests to my site
failing - 500s. But only in one browser. To sum up: If you have an MVC site,
and are using Html.AntiForgeryToken() - any existing browser sessions will need
to be closed and reopened so that the session cookie that was generated before
the patch was applied, for that antiforgery token, can be killed. Your existing
users may need to be informed of this - I can't see anyway to change the name of that
cookie.
Вы также можете столкнуться с этой проблемой при обновлении с MVC 1 до MVC 2:
В обоих случаях обходной путь, если вы не можете заставить пользователей перезапускать браузер, требует редактирования кода приложения и повторного развертывания. Вы можете отредактировать приложение, чтобы при возникновении исключения вы очистили файл cookie AntiForgeryToken из входящего запроса, а затем повторно выполнили файл cookie маркера, вызвав Html.AntiForgeryToken (). Однако при этом вы должны позаботиться о том, чтобы вы делали это только в соответствующих местах (например, на странице ошибки или другой странице, которая не изменить данные) - в противном случае вы потеряете всю защиту от атак CSRF, что является единственной причиной использования токена защиты от подделки в первую очередь.