Подтвердить что ты не робот

Asp.net Не удалось выполнить проверку MAC-адреса viewstate

Я получаю следующую ошибку в определенное время на веб-сайте asp.net.

 Sys.WebForms.PageRequestManagerServerErrorException: 
 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.

Когда обновление страницы идет, не проблема. Как я могу решить эту проблему?

4b9b3361

Ответ 1

Если вы используете веб-ферму и запускаете одно и то же приложение на нескольких компьютерах, вам необходимо явно указать ключ компьютера в файле machine.config:

<machineKey validationKey="JFDSGOIEURTJKTREKOIRUWTKLRJTKUROIUFLKSIOSUGOIFDS..." decryptionKey="KAJDFOIAUOILKER534095U43098435H43OI5098479854" validation="SHA1" />

Поместите его под <system.web>.

Автогенерация для машинного кода не может быть использована. Чтобы создать свой собственный machineKey, посмотрите этот скрипт powershell: https://support.microsoft.com/en-us/kb/2915218#bookmark-appendixa

Ответ 2

У меня была эта проблема, и для меня ответ был другим, чем другие ответы на этот вопрос.

У меня есть приложение с большим количеством клиентов. Я улавливаю всю ошибку в application_error в global.asax, и я отправляю электронное письмо с подробной информацией об ошибке. После того, как я опубликовал новую версию своих приложений, я начал получать много сообщений о неудачной ошибке с подтверждением отказа в представлении ViewState.

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

Прошу прощения за мой английский, и я знаю, что мое дело очень специфично, но если это поможет кому-то спасти день, я думаю, что это хорошо.

Ответ 3

Microsoft говорит никогда не использовать веб-сайт генератора ключей.

Как и все остальные, я добавил это в свой web.config.

<System.Web> <machineKey decryptionKey="ABC123...SUPERLONGKEY...5432JFEI242" validationKey="XYZ234...SUPERLONGVALIDATIONKEY...FDA" validation="SHA1"/> </system.web>

Тем не менее, я использовал IIS в качестве генератора machineKey примерно так:

  1. Откройте IIS и выберите веб-сайт, чтобы получить этот экран:

enter image description here

  1. Дважды щелкните значок ключа машины, чтобы получить этот экран:

enter image description here

  1. Нажмите на ссылку "Создать ключи" справа, которую я обрисовал в общих чертах на картинке выше.

Заметки:

  • Если вы установите флажок "Создать уникальный ключ для каждого приложения", IsolateApps будет добавлен в конец ваших ключей. Я должен был удалить их, чтобы заставить приложение работать. Очевидно, они не являются частью ключа.
  • SHA1 был методом шифрования по умолчанию, выбранным IIS, и если вы его измените, не забудьте изменить свойство проверки для machineKey в файле web.config. Однако методы и алгоритмы шифрования развиваются, поэтому, пожалуйста, не стесняйтесь редактировать этот пост с обновленным предпочтительным методом шифрования или упомянуть его в примечаниях, а я обновлю.

Ответ 4

Это решение работало для меня в ASP.NET 4.5 с использованием сайта Web Forms.

  • Используйте следующий сайт для создания машинного ключа: http://www.blackbeltcoder.com/Resources/MachineKey.aspx
  • Скопировать полную машину Key Code.
  • Перейдите в свой файл Web.Config.
  • Вставьте ключ машины в следующий раздел кода:

    <configuration >

    <system.web >

    <machineKey ... />
    

    </system.web >

    </configuration >

Вы больше не должны видеть ошибку с ошибкой в ​​представлении Windows. Каждый веб-сайт в том же пуле приложений должен иметь отдельный машинный ключ, иначе эта ошибка будет продолжена.

Ответ 5

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

Не удалось выполнить проверку MAC-адреса viewstate. Если это приложение размещено Веб-ферма или кластер, убедитесь, что в конфигурации указано тот же валидационный ключ и алгоритм проверки

Определение машинного кода в файле web.config устраняет проблему. Но вместо использования сторонних сайтов для генерации кода, которые могут быть повреждены, запустите это из командной оболочки: На основе решения Microsoft 1a, https://support.microsoft.com/en-us/kb/2915218#AppendixA

# Generates a <machineKey> element that can be copied + pasted into a Web.config file.
function Generate-MachineKey {
  [CmdletBinding()]
  param (
    [ValidateSet("AES", "DES", "3DES")]
    [string]$decryptionAlgorithm = 'AES',
    [ValidateSet("MD5", "SHA1", "HMACSHA256", "HMACSHA384", "HMACSHA512")]
    [string]$validationAlgorithm = 'HMACSHA256'
  )
  process {
    function BinaryToHex {
        [CmdLetBinding()]
        param($bytes)
        process {
            $builder = new-object System.Text.StringBuilder
            foreach ($b in $bytes) {
              $builder = $builder.AppendFormat([System.Globalization.CultureInfo]::InvariantCulture, "{0:X2}", $b)
            }
            $builder
        }
    }
    switch ($decryptionAlgorithm) {
      "AES" { $decryptionObject = new-object System.Security.Cryptography.AesCryptoServiceProvider }
      "DES" { $decryptionObject = new-object System.Security.Cryptography.DESCryptoServiceProvider }
      "3DES" { $decryptionObject = new-object System.Security.Cryptography.TripleDESCryptoServiceProvider }
    }
    $decryptionObject.GenerateKey()
    $decryptionKey = BinaryToHex($decryptionObject.Key)
    $decryptionObject.Dispose()
    switch ($validationAlgorithm) {
      "MD5" { $validationObject = new-object System.Security.Cryptography.HMACMD5 }
      "SHA1" { $validationObject = new-object System.Security.Cryptography.HMACSHA1 }
      "HMACSHA256" { $validationObject = new-object System.Security.Cryptography.HMACSHA256 }
      "HMACSHA385" { $validationObject = new-object System.Security.Cryptography.HMACSHA384 }
      "HMACSHA512" { $validationObject = new-object System.Security.Cryptography.HMACSHA512 }
    }
    $validationKey = BinaryToHex($validationObject.Key)
    $validationObject.Dispose()
    [string]::Format([System.Globalization.CultureInfo]::InvariantCulture,
      "<machineKey decryption=`"{0}`" decryptionKey=`"{1}`" validation=`"{2}`" validationKey=`"{3}`" />",
      $decryptionAlgorithm.ToUpperInvariant(), $decryptionKey,
      $validationAlgorithm.ToUpperInvariant(), $validationKey)
  }
}

Тогда:

Для ASP.NET 4.0

Generate-MachineKey

Ваш ключ будет выглядеть так: <machineKey decryption="AES" decryptionKey="..." validation="HMACSHA256" validationKey="..." />

Для ASP.NET 2.0 и 3.5

Generate-MachineKey -validation sha1

Ваша кнопка будет выглядеть так: <machineKey decryption="AES" decryptionKey="..." validation="SHA1" validationKey="..." />

Ответ 6

Моя проблема была в этом фрагменте кода javascript

$('input').each(function(ele, indx){
    this.value = this.value.toUpperCase();
});

Повернулось, что он возился с скрытым полем viewstate, поэтому я изменил его на код ниже и работал

$('input:visible').each(function(ele, indx){
    this.value = this.value.toUpperCase();
});

Ответ 7

Уважаемые все со всеми ответами на ответы там есть случай дает эту ошибку, когда значение web.config

<httpCookies httpOnlyCookies="true" requireSSL="true"/>

и ссылка http, а не https

Ответ 8

Это сообщение об ошибке обычно отображается после публикации вашего веб-сайта на сервере.

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

Настройте свой веб-сайт для использования правильной версии .NET Framework (т.е. v4.0) в разделе "Общие" пула приложений, относящегося к вашему веб-сайту.

В разделе "Модель процесса" установите для параметра "Идентификация" значение "Сетевая служба".

Закройте диалоговое окно и щелкните правой кнопкой мыши веб-сайт и выберите "Дополнительные настройки..." на странице "Управление сайтом" в меню содержимого. В диалоговом окне в разделе "Общие" убедитесь, что вы выбрали правильное имя пула приложений, который будет использоваться.

Теперь ваш сайт должен работать без проблем.

Надеюсь, это поможет вам преодолеть эту ошибку.

Ответ 9

ЧТО РАБОТАЕТ НА МЕСЯЦ

  • Поиск в Интернете для "Генератора MachineKey"

  • Перейдите на один из найденных сайтов и сгенерируйте машинный ключ, который будет выглядеть... (цифры больше)
    ... MachineKey
    validationKey = "0EF6C03C11FC... 63EAE6A00F0B6B35DD4B" decryptionKey = "2F5E2FD80991C629... 3ACA674CD3B5F068" validation = "SHA1" decryption = "AES" /" >

  • Скопируйте и вставьте в раздел <system.web> файл web.config.

Если вы хотите следовать по пути, который я сделал...


https://support.microsoft.com/en-us/kb/2915218#AppendixA
Разрешение ошибок кода аутентификации сообщения состояния состояния (MAC) Разрешение 3b: используйте явный <machineKey>
Добавив явный элемент <machineKey> в файл приложения Web.config, разработчик сообщает ASP.NET не использовать автоматически сгенерированный криптографический ключ. См. Приложение A для инструкций о том, как сгенерировать элемент <machineKey>.


http://blogs.msdn.com/b/amb/archive/2012/07/31/easiest-way-to-generate-machinekey.aspx
Самый простой способ создать MachineKey - Ахмет Митхат Бостанчи - 31 июля 2012 Вы можете искать в Bing для "MachineKey generator" и использовать онлайн-сервис. Честно...


http://www.blackbeltcoder.com/Resources/MachineKey.aspx

Ответ 10

Не удалось выполнить проверку MAC-адреса viewstate. Если это приложение размещено веб-фермой или кластером, убедитесь, что в конфигурации <machineKey> указан тот же алгоритм validationKey и валидации. AutoGenerate не может использоваться в кластере.

Ответ:

<machineKey  decryptionKey="2CC8E5C3B1812451A707FBAAAEAC9052E05AE1B858993660" validation="HMACSHA256" decryption="AES" validationKey="CB8860CE588A62A2CF9B0B2F48D2C8C31A6A40F0517268CEBCA431A3177B08FC53D818B82DEDCF015A71A0C4B817EA8FDCA2B3BDD091D89F2EDDFB3C06C0CB32" />

Ответ 11

У меня была эта же проблема, и это было связано с Gridview (сгенерированным из кода vb) на странице, на которой была включена сортировка. Отключить сортировку исправлена ​​моя проблема. У меня нет этой проблемы с gridviews, созданным с использованием SQLdatasource.

Ответ 12

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

Ни один из решений не работал у меня.

Я установил машинный ключ с Microsoft script и скопировал в мой web.config

Я выполнил asp.net regiis script.

aspnet_regiis -ga "IIS APPPOOL\My App Pool"

Также попытался добавить этот код на страницу:

enableViewStateMac="false"

до сих пор не повезло.

Любая другая идея для решения этой проблемы?

UPDATE:

Наконец, я решил проблему. Я включил свой компонент angular 4 в свой сайт asp.net. Таким образом, я добавил базу href в мою главную страницу. Поэтому я удалил этот код, и теперь он работает нормально.

<base href="/" />

Ответ 13

Есть еще один сценарий, который происходит для моих клиентов. Это происходило нормально в определенное время из-за смены смены, и пользователи должны были войти в систему с другим пользователем. Вот сценарий, по которому система защиты от подделки защищает систему, генерируя эту ошибку:

1- После закрытия/открытия браузера. 2- Перейдите на свой веб-сайт и войдите с "Пользователем A" 3- Откройте новую вкладку в браузере и введите тот же адрес сайта. (Вы можете видеть домашнюю страницу своего сайта без какой-либо аутентификации) 4- Выйдите из вашего сайта и войдите с другим пользователем (пользователем B) на второй вкладке. 5- Теперь вернитесь к первой вкладке, в которую вы вошли "пользователем A". Вы по-прежнему можете видеть страницу, но любое действие на этой вкладке приведет к ошибке. Поскольку ваш файл cookie уже обновлен пользователем "B", и вы пытаетесь отправить запрос недействительным пользователем. (Пользователь А)

Ответ 14

Я унаследовал старое приложение. Добавлен CSRF на страницу входа. У меня есть ОДИН ПОЛЬЗОВАТЕЛЬ, который получает эту ошибку.. больше никто. Какого черта? Я даже не знаю, с чего начать..

Ответ 15

<system.web>
<pages validateRequest="false" enableEventValidation="false" viewStateEncryptionMode ="Never" />
</system.web>