ASP.MVC токен подделки и криптографические ошибки - PullRequest
7 голосов
/ 02 ноября 2009

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

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

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

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

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

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

Ответы [ 2 ]

4 голосов
/ 25 ноября 2009

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

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

После обновления сайта и перехода на стационарный компьютер. Я обнаружил, что все еще получаю эти ошибки от людей, у которых были куки из предыдущей версии. В качестве временного решения я добавил следующий обработчик 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( "~" );
        }
    }
1 голос
/ 04 ноября 2009

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

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

...