Токен защиты от подделки ASP.MVC и криптографические ошибки

StackOverflow https://stackoverflow.com/questions/1662016

Вопрос

Я использую ELMAH для обработки ошибок на своих сайтах MVC и за последние пару недель заметил, что у меня возникают некоторые исключения CryptographicExceptions.Сообщение следующее:

System.Security.Cryptography.CryptographicException:Заполнение недопустимо и не может быть удалено.

System.Web.Mvc.HttpAntiForgeryException:Требуемый токен анти-форуги не был поставлен или был недействительным.---> system.web.httpexception:Проверка ViewState Mac не удалась.Если это приложение размещено в веб -ферме или кластере, убедитесь, что конфигурация указывает тот же алгоритм проверки и валидации.Аутогенерат не может быть использован в кластере.--->

Приложение не работает в кластере, и я не могу воспроизвести эти ошибки.Они выглядят как действительные запросы, а не как рукописные сообщения, и содержат файл cookie __RequestVerificationToken.У меня есть необходимый HTML-помощник на странице внутри формы (моя форма входа).

У меня пока не было никаких жалоб со стороны пользователей, поэтому я предполагаю, что в конечном итоге это сработает для любого, кто пытается войти в систему, но мне остается только задаваться вопросом, почему это может происходить.

Кто-нибудь еще видит такое поведение или имеет какие-либо идеи о том, как диагностировать исключение - как я уже сказал, я не могу заставить его выйти из строя.Удаление файла cookie в FF приводит к другой ошибке.Изменение файла cookie (изменение или удаление содержимого) также приводит к другой ошибке, как и изменение содержимого скрытого ввода токена на странице.

Это было полезно?

Решение

Я не уверен, есть ли корреляция, но после добавления файла robots.txt, исключающего мои действия по входу в систему, я больше не вижу этих ошибок.Я подозреваю, что это связано с тем, что сканер заходит на страницу и пытается вызвать действие входа в систему.

РЕДАКТИРОВАТЬ:Я также сталкиваюсь с этой проблемой при получении старых файлов cookie после перезапуска пула приложений.Я прибег к явной настройке машинного ключа, чтобы изменения ключей проверки/дешифрования при перезапуске приложения не влияли на старые файлы cookie, которые могут быть повторно отправлены.

После обновления сайта и перехода на фиксированный компьютерный ключ я обнаружил, что все еще получаю эти ошибки от людей, у которых были файлы cookie из предыдущей версии.В качестве временной меры я добавил следующий обработчик Application_Error:

    public void Application_Error()
    {
        var exception = Server.GetLastError().GetBaseException();
        if (exception is System.Security.Cryptography.CryptographicException)
        {
            Server.ClearError();
            if (Request.IsAuthenticated)
            {
                var form = new FormsAuthenticationWrapper();
                form.SignOut();
                Session.Clear();
            }
            Response.Cookies.Clear();
            Response.Redirect( "~" );
        }
    }

Другие советы

Я не уверен, что это имеет какое-то конкретное отношение к системе защиты от подделки, внутреннее исключение гласит: «Проверка MAC-адреса состояния просмотра не удалась». Насколько я могу судить, инфраструктура по умолчанию для системы защиты от подделки зависит от состояния просмотра ( на самом деле, если ты взгляни сюда вы увидите зависимость и ужас (метод CreateFormatterGenerator внизу)).

Что касается того, почему Mac viewstate не справляется с поддельным запросом, я не уверен, но, учитывая ужас, который существует при десериализации токена защиты от подделки (обработка всего поддельного запроса), это меня совсем не удивляет.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top