programing

Asp.net 보기 상태 MAC 유효성 검사 실패

linuxpc 2023. 8. 4. 22:42
반응형

Asp.net 보기 상태 MAC 유효성 검사 실패

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.

페이지 새로 고침이 진행되면 문제 없습니다.어떻게 하면 이 문제를 해결할 수 있을까요?

마이크로소프트는 절대 제너레이터사이트를 사용하지 말라고 말합니다.

여기 있는 다른 사람들과 마찬가지로, 저는 이것을 제 웹사이트에 추가했습니다.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. Machine Key(기계 키) 아이콘을 두 번 클릭하여 다음 화면을 표시합니다.

enter image description here

  1. 위 그림에서 설명한 오른쪽의 "키 생성" 링크를 클릭합니다.

주의:

  • 각 응용 프로그램에 대해 고유 키 생성 확인란을 선택하면 키 끝에 ",IsolateApps"가 추가됩니다.앱을 작동시키기 위해 이것들을 제거해야 했습니다.분명히, 그들은 열쇠의 일부가 아닙니다.
  • SHA1은 IIS에서 선택한 기본 암호화 방법이며, 이를 변경할 경우 web.config의 machineKey에서 유효성 검사 속성을 변경하는 것을 잊지 마십시오.그러나 암호화 방법과 알고리즘은 발전하므로 업데이트된 선호 암호화 방법으로 이 게시물을 자유롭게 편집하거나 노트에 언급하면 업데이트하겠습니다.

웹 팜을 사용하고 여러 컴퓨터에서 동일한 응용 프로그램을 실행하는 경우 machine.config 파일에서 기계 키를 명시적으로 정의해야 합니다.

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

그것을 아래에 두세요.<system.web>꼬리표를 달다

컴퓨터 코드에 대한 자동 생성을 사용할 수 없습니다.자신의 컴퓨터를 생성하려면키다음 PowerShell 스크립트를 참조하십시오. https://support.microsoft.com/en-us/kb/2915218#bookmark-appendixa

저는 이 문제를 겪었고, 저에게는 이 질문에 대한 다른 답들과는 다른 답이었습니다.

나는 많은 고객들이 있는 애플리케이션을 가지고 있습니다." application_error"에 있는 합니다.global.asax그리고 오류 세부사항이 포함된 이메일을 보냅니다.새 버전의 앱을 게시한 후, 보기 상태 MAC 오류 메시지가 많이 표시되기 시작했습니다.

하루 동안 검색한 결과 앱에 매 분마다 업데이트 패널을 새로 고치는 타이머가 있다는 것을 알게 되었습니다.그래서 제가 새로운 버전의 앱을 게시했을 때, 어떤 고객이 제 웹사이트에 그녀의 컴퓨터를 열어 놓았습니다.실제 보기 상태가 새 보기 상태와 일치하지 않기 때문에 타이머를 새로 고칠 때마다 오류 메시지가 표시됩니다.모든 고객이 웹 사이트를 닫거나 브라우저를 새로 고쳐 새 버전을 얻을 때까지 이 메시지를 받았습니다.

제 영어 실력에 대해 미안하고, 제 경우가 매우 구체적이라는 것을 알고 있지만, 만약 누군가가 하루를 절약하는 데 도움이 된다면, 저는 그것이 좋은 일이라고 생각합니다.

이 솔루션은 ASP에서 저에게 효과가 있었습니다.웹 양식 사이트를 사용하는 NET 4.5.

  1. 다음 사이트를 사용하여 컴퓨터 키를 생성합니다(예: 프로덕션에서 보안 메서드만 사용). http://www.blackbeltcoder.com/Resources/MachineKey.aspx
  2. 전체 컴퓨터 키 코드를 복사합니다.
  3. 웹으로 이동합니다.구성 파일.
  4. 다음 코드 섹션에 기계 키를 붙여넣습니다.
    <configuration>
      <system.web>
        <machineKey ... />
      </system.web>
    </configuration> 

보기 상태 Mac 실패 오류가 더 이상 표시되지 않습니다.동일한 앱 풀의 각 웹 사이트에는 별도의 컴퓨터 키가 있어야 합니다. 그렇지 않으면 이 오류가 계속 발생합니다.

친애하는 모든 사람들에게 위의 답변에 대한 모든 존경심과 함께 web.config 값이 다음과 같은 경우에 이 오류가 발생합니다.

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

링크는 https가 아니라 https입니다.

다중 서버 환경에서 이 오류는 세션이 만료되고 응용 프로그램의 다른 인스턴스가 동일한 세션 ID와 컴퓨터 키를 사용하지만 다른 서버에 있을 때 발생할 수 있습니다.처음에는 각 서버가 자체 시스템 키를 생성하고 나중에는 단일 응용 프로그램 인스턴스와 연결됩니다.세션이 만료되고 현재 서버가 사용 중이면 로드 밸런서를 통해 보다 작동 가능한 서버로 애플리케이션이 리디렉션됩니다.여러 서버에서 동일한 앱을 실행하는 경우 다음과 같은 오류 메시지가 표시됩니다.

보기 상태 MAC의 유효성을 검사하지 못했습니다.이 응용 프로그램이 웹 팜 또는 클러스터에서 호스트되는 경우 구성에서 동일한 유효성 검사 키 및 유효성 검사 알고리즘을 지정해야 합니다.

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="..." />

나에게 도움이 된 것

  1. 웹에서 "MachineKey generator"를 검색합니다.

  2. 발견된 사이트 중 하나로 이동하여 컴퓨터 키를 생성합니다. 그러면 다음과 같습니다.(숫자가 더 큽니다)
    키...파일 이름:
    "0ValidationKey="0"3EF6C03C11FC...63EAE6A00F0B6B35DD4B" 파일 이름 ="2F5E2FD80991C629...3ACA674CD3B5F068" 암호 해독" 암호 ="SHA1" 암호해독="AES"AES" />

  3. 해서 사여에습니다넣에 .<system.web>web.config 파일의 섹션입니다.

내가 한 길을 따라가고 싶다면,


https://support.microsoft.com/en-us/kb/2915218#://support.microsoft.com/en-us/kb/2915218#AppendixA
메시지 코드 해결 해결 인 MAC 사용 : 사용<machineKey>
으로 명으로추로써으함을 으로써.<machineKey>응용 프로그램의 Web.config 파일 요소인 개발자는 ASP에 알립니다.자동 생성된 암호화 키를 사용하지 않는 NET.다을 생는방를부록 A십오시하참을 은 부록 하십시오.<machineKey>요소


http://blogs.msdn.com/b/amb/archive/2012/07/31/.aspxhttp ://blogs.msdn.com/b/amb/archive/2012/07/31/easiest-way-to-generate-machinekey.aspx
머신키를 생성하는 가장 쉬운 방법 - 아흐메트 미타트 보스탄치 - 2012년 7월 31일 빙에서 "머신키 생성기"를 검색하고 온라인 서비스를 사용할 수 있습니다.솔직히...


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

나의 문제는 자바스크립트 코드의 이 부분이었습니다.

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

돌아보니 뷰 상태 숨겨진 필드가 엉망이 되어 있어서 아래 코드로 변경했더니 작동했습니다.

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

이 오류 메시지는 일반적으로 웹 사이트를 서버에 게시한 후에 표시됩니다.

주요 문제는 웹 사이트에 사용하는 응용 프로그램 풀에 있습니다.

웹 사이트를 구성하여 해당 항목을 사용합니다.웹 사이트와 관련된 응용 프로그램 풀의 일반 섹션에 있는 NET Framework 버전(예: v4.0).

프로세스 모델에서 ID 값을 네트워크 서비스로 설정합니다.

대화 상자를 닫고 웹 사이트를 마우스 오른쪽 단추로 클릭하고 고급 설정...을 선택합니다.내용 메뉴의 웹 사이트 관리 옵션에서 선택할 수 있습니다.대화 상자의 일반 섹션에서 사용할 응용 프로그램 풀의 올바른 이름을 선택했는지 확인합니다.

이제 웹 사이트가 문제 없이 실행됩니다.

이것이 이 오류를 극복하는 데 도움이 되기를 바랍니다.

보기 상태 MAC의 유효성을 검사하지 못했습니다.웹 팜 클러스터에 에는 " " "라는 파일이 있는지 합니다.<machineKey>구성은 동일한 유효성 검사 키 및 유효성 검사 알고리즘을 지정합니다.클러스터에서 자동 생성을 사용할 수 없습니다.

답변:

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

저도 같은 문제가 있었는데, 정렬이 활성화된 페이지의 그리드 보기(vb 코드에서 생성됨) 때문이었습니다.정렬을 비활성화하면 문제가 해결됩니다.SQL 데이터 소스를 사용하여 생성된 그리드 보기에는 이 문제가 없습니다.

어떻게 이런 일이 발생했는지는 잘 모르겠지만 내부 제출 양식 페이지에서 이 오류가 발생하기 시작했습니다.그래서 제가 무언가를 제출할 때마다 이 오류가 발생합니다.하지만 문제는 이 웹사이트가 거의 5~6년 동안 작동하고 있다는 것입니다.제가 중요한 변화를 준 기억이 없습니다.

어떤 해결책도 저에게 효과가 없었습니다.

Microsoft 스크립트로 기계 키를 설정하고 web.config에 복사했습니다.

저는 asp.net regis 스크립트를 실행했습니다.

aspnet_regiis -ga "IIS APPPOOL\My App Pool"

또한 이 코드를 페이지에 추가하려고 했습니다.

enableViewStateMac="false"

여전히 운이 없습니다.

이 문제를 해결할 다른 아이디어가 있습니까?

업데이트:

마침내 저는 그 문제를 해결했습니다.저는 제 각진 4 구성요소를 제 asp.net 웹사이트에 통합했습니다.그래서 저는 제 마스터 페이지에 base href를 추가했습니다.그래서 저는 그 코드를 제거했고 지금은 잘 작동하고 있습니다.

<base href="/" />

제 고객들에게 일어나고 있던 또 다른 시나리오가 있습니다.이는 이동 변경 사항과 사용자가 다른 사용자로 로그인해야 하기 때문에 특정 시간에 정상적으로 발생했습니다.다음은 위조 방지 시스템이 이 오류를 생성하여 시스템을 보호하는 시나리오입니다.

1- 브라우저를 닫거나 열면 2- 웹사이트로 이동하여 "A 사용자"로 로그인합니다. 3- 브라우저에서 새 탭을 열고 동일한 주소 사이트를 입력합니다.(인증 없이도 사이트 홈 페이지를 볼 수 있습니다) 4 - 사이트에서 로그아웃하고 두 번째 탭에서 다른 사용자(사용자 B)로 로그인합니다. 5 - 이제 "사용자 A"로 로그인한 첫 번째 탭으로 돌아갑니다.페이지가 계속 표시되지만 이 탭의 모든 작업은 오류를 발생시킵니다.쿠키가 "사용자 B"에 의해 이미 업데이트되었고 사용자가 잘못된 사용자의 요청을 보내려고 하기 때문입니다. (사용자 A)

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

저는 IIS에서 호스팅되는 제 웹사이트에서 비슷한 문제에 직면한 적이 있습니다.이 문제는 일반적으로 IIS 응용 프로그램 풀 설정 때문입니다.애플리케이션 풀이 일정 시간 후에 재활용되어 문제가 발생했습니다.

다음 단계는 문제를 해결하는 데 도움이 됩니다.

  1. IIS에서 웹 사이트의 앱 풀을 엽니다.
  2. 오른쪽 창의 고급 설정으로 이동합니다.
  3. 아래로 스크롤하여 프로세스 모델
  4. 유휴 제한 시간을 앱 풀을 재활용하지 않을 20분 또는 20분으로 변경합니다.

enter image description here

그럼 다시 해보세요.그것은 당신의 문제를 해결해줄 것입니다.

저는 우리 프로젝트에서 같은 문제를 경험했습니다.Microsoft 지원페이지는 원인을 찾는 데 도움이 되었습니다.그리고 이 솔루션은 문제를 해결하는 데 도움이 되었습니다.

저의 경우에는 문제가 있었습니다.ViewStateUserKey~하듯이Page.ViewStateUserKey속성 값이 잘못되었습니다(여기에 4개 발생).로컬 호스트 인증서를 삭제하고 여기에 언급된 대로 IIS Express를 복구하여 다시 생성하면 문제가 해결되었습니다.

그것은 나에게 효과가 있었습니다.

시스템 간에 추가하면 됩니다.웹 섹션 <시스템.web>

</system>.web>

언급URL : https://stackoverflow.com/questions/5840899/asp-net-validation-of-viewstate-mac-failed

반응형