programing

.NET 응용 프로그램의 불규칙한 잘못된 보기 상태 문제

muds 2023. 6. 25. 20:39
반응형

.NET 응용 프로그램의 불규칙한 잘못된 보기 상태 문제

ASP.NET 응용 프로그램의 이벤트 뷰어에서 가끔 "잘못된 보기 상태"가 표시되는 것 같습니다.

대부분(95%)이 참조하고 있는 것으로 보입니다.ScriptResource.axd(응용 프로그램은 ASP.NET AJAX 라이브러리를 사용합니다.).Ajax는 어디서나 사용되기 때문에 Ajax 라이브러리도 제거할 수 없습니다.

어떻게 하면 이러한 오류를 줄일 수 있습니까?하루에 100~200개의 오류가 발생하는데 어떻게 해결해야 할지 모르겠습니다!이들은 서로 다른 브라우저, 서로 다른 IP 및 지리적 위치가 다릅니다.

나는 그 문제를 재현하기가 어렵습니다. 왜냐하면 나는 그것이 거의 일어나지도 않았는데 갑자기 3-4번밖에 일어나지 않았기 때문입니다.

오류:

Process information: 
    Process ID: 4004 
    Process name: w3wp.exe 
    Account name: NT AUTHORITY\NETWORK SERVICE 

Exception information: 
    Exception type: HttpException 
    Exception message: Invalid viewstate. 

Request information: 
    Request URL: http://domainnamehere/ScriptResource.axd?d=W1R6x9VzZ2C9SKnIkOmX9VRLhSjJ3nOF1GSQvPwKS3html 
    Request path: /ScriptResource.axd 
    User host address: 124.177.170.75 
    User:  
    Is authenticated: False 
    Authentication Type:  
    Thread account name: NT AUTHORITY\NETWORK SERVICE 

Thread information: 
    Thread ID: 1 
    Thread account name: NT AUTHORITY\NETWORK SERVICE 
    Is impersonating: False 
    Stack trace:    at System.Web.UI.Page.DecryptStringWithIV(String s, IVType ivType)
   at System.Web.UI.Page.DecryptString(String s)
   at System.Web.Handlers.ScriptResourceHandler.DecryptParameter(NameValueCollection queryString)
   at System.Web.Handlers.ScriptResourceHandler.ProcessRequestInternal(HttpResponse response, NameValueCollection queryString, VirtualFileReader fileReader)
   at System.Web.Handlers.ScriptResourceHandler.ProcessRequest(HttpContext context)
   at System.Web.Handlers.ScriptResourceHandler.System.Web.IHttpHandler.ProcessRequest(HttpContext context)
   at System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()
   at System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously)


Custom event details: 

For more information, see Help and Support Center at http://go.microsoft.com/fwlink/events.asp.

또한 .NET 코드에서 관련이 있을 수 있는 동시에 발생하는 다음과 같은 오류가 가끔 발생합니다.

Exception raised in GLOBAL.ASAX.Application_Error(): 'Padding is invalid and cannot be removed.' at System.Security.Cryptography.RijndaelManagedTransform.DecryptData(Byte[] inputBuffer, Int32 inputOffset, Int32 inputCount, Byte[]& outputBuffer, Int32 outputOffset, PaddingMode paddingMode, Boolean fLast)
   at System.Security.Cryptography.RijndaelManagedTransform.TransformFinalBlock(Byte[] inputBuffer, Int32 inputOffset, Int32 inputCount)
   at System.Security.Cryptography.CryptoStream.FlushFinalBlock()
   at System.Web.Configuration.MachineKeySection.EncryptOrDecryptData(Boolean fEncrypt, Byte[] buf, Byte[] modifier, Int32 start, Int32 length, IVType ivType, Boolean useValidationSymAlgo)
   at System.Web.UI.ObjectStateFormatter.Deserialize(String inputString)

이것은 많은 사람들이 겪어온 IE8 문제와 동일한 것으로 보입니다.어떻게든 IE8(IE8 렌더링 모드와 IE7 호환성 모드 모두)은 HTML 문서의 중간에서 4096바이트를 잃게 되고 이 누락된 데이터는 이 예외를 발생시킵니다(보통 ScriptResource 또는 WebResource 호출에서 볼 수 있음).

다음은 이 문제에 대한 Microsoft 버그 보고서입니다. https://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=434997

또한 이 문제에 대한 많은 포럼, 블로그 등의 게시물이 있습니다.


Microsoft는 이 문제에 대응했습니다.

노트는 Internet Explorer 8의 버그입니다.Internet Explorer 팀에서 이 문제를 조사하고 있습니다.

영향: 아직까지는 이 문제가 최종 사용자의 웹 애플리케이션 사용 경험에 영향을 미치지 않는다고 생각합니다. 단 한 가지 부정적인 영향은 JavaScript 추측 다운로드 엔진에서 전송한 허위/잘못된 형식의 요청입니다.구문 분석기에서 스크립트가 실제로 필요할 때, 해당 스크립트는 적절하게 다운로드되어 사용됩니다.

환경:spurious-request는 특정 타이밍 상황에서만 발생하는 것으로 보이며, 문서에 CHARSET 디렉티브가 포함된 Content-Type이 포함된 META HTTP-EQUIV 태그가 나타나고 JavaScript SRC URL이 HTTP 응답 본문의 4096번째 바이트에 걸쳐 있을 때만 발생합니다.

해결 방법:따라서 현재 페이지 내에서 지정하는 대신 HTTP Content-Type 헤더를 사용하여 페이지의 CHARSET를 선언하면 이 문제를 완화할 수 있다고 생각합니다.

그래서, 넣는 것보다는.

<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=utf-8">

대신 헤드 태그에서 다음 HTTP 응답 헤더를 전송합니다.

Content-Type: text/html; charset=utf-8

HTTP 헤더에 문자 집합을 지정하면 모든 브라우저에서 성능이 향상됩니다. 문자 집합 선언이 발생할 때 브라우저의 파서가 처음부터 구문 분석을 다시 시작할 필요가 없기 때문입니다.또한 HTTP 헤더를 사용하면 특정 XSS 공격 벡터를 완화하는 데 도움이 됩니다.

참고: META HTTP-EQUIV가 페이지에 없을 때 이 문제가 여전히 발생한다는 보고가 있었습니다.우리는 조사가 더 진행되면 이 의견을 업데이트할 것입니다.

Microsoft에서 2009년 6월 30일 오후 12시 25분에 게시했습니다.

편집: 여전히 가끔 이 예외가 표시되지만 이 버그는 수정된 것으로 보고됩니다.링크

ASP.NET AJAX를 사용하고 있는 것 같습니다.저도 같은 문제를 겪고 있습니다.가끔 이벤트 로그에서 이 예외를 발견하고 요청한 경로는 항상 스크립트 리소스입니다.도끼의

machineKey에서 fixed validationKey와 decryptionKey를 사용해도 문제가 해결되지 않았습니다.

제가 수집한 내용에 따르면, 저는 이 오류가 ViewState와 전혀 관련이 없다고 생각하는 경향이 있습니다. 제 이론은 어떤 이유에서인지 특정 UA가 ScriptResource의 "d" 매개 변수를 엉망으로 만든다는 것입니다.axd. 문제를 일으키는 경로를 수동으로 요청하면 문제를 쉽게 복제할 수 있습니다.이 경우 ViewState가 여기에 적용되지 않더라도 "Invalid ViewState" 예외가 발생합니다.

로그를 조사해 보니 다음과 같은 예가 있었습니다.

이 요청은 OK(200): /ScriptResource.axd?d=oFCAB7_vUyp7Hhe9lxZBz37lpoAxhfbWwdfFy3Zd3z41W_33Y_9Dq6i10g9Q1NRCY1n0_DNG1nE6-DDBSD6r4EuwoeDzp9mjDDfBNLb1k1&t=41df03cc

이 약간 다른 요청도 OK(200): /ScriptResource.axd?d=oFCAB7_vUyp7Hhe9lxZBz37lpoAxhfbWwdfFy3Zd3z41W_33Y_9Dq6i10g9Q1NR5ijsxQts4AfbJdACRwmQ8sHt6UAzui3spEnooPneTz01&t=41df03cc

이 요청은 실패하고 500 응답과 Invalid ViewState 예외: /ScriptResource.axd?d=oFCAB7_vUyp7Hhe9lxZBz37lpoAxhfbWwdfFy3Zd3z41W_3 제품 $ctl00$카트에 추가1$id

자세히 살펴보면 세 가지 요청 모두의 처음 몇 글자는 동일하지만 마지막 요청의 마지막 몇 글자(굵은 글씨)는 분명히 Control ID "products$ctl00$AddToCart1$id"입니다(제품 및 AddToCart라는 이름의 컨트롤을 가지고 있습니다).이 ID가 어떻게 그곳에 도착했는지는 모르겠지만, 저의 경우 이것이 잘못된 ViewState 예외를 모두 발생시키는 원인입니다.

이것이 OP와 같은 경우인지 아닌지는 잘 모르겠지만, 마틴의 요청 URL이 "html"로 끝나는 것을 보았습니다. 이것은 키가 되어야 하는 매개 변수에 대한 약간의 우연입니다...

저는 이 문제 때문에 이미 머리가 아파요.지금까지 제가 발견한 가장 통찰력 있는 게시물은 http://bytes.com/topic/asp-net/answers/861764-invalid-viewstate-system-string-decryptstringwithiv 입니다.

통찰력은?

보기 상태 문제는 짜증나고 짜증납니다. 이 스레드에서 보기 상태 문제에 대해 이야기한 사람이 몇 명 있습니다.그래서, 여기 여러분이 순서대로 볼 수 있는 몇 가지 제안들이 있습니다.

  1. 나는 프레디 리오스가 이미 말한 것을 반복할 것입니다.컴퓨터 키를 하드 코딩했는지 확인합니다.이것은 이러한 문제의 대부분을 해결할 것입니다.ScriptResource 링크의 중요한 점은 쿼리 문자열에 d 매개 변수와 at 매개 변수가 있어야 한다는 것입니다.만약 그게 아니라면, 다른 무언가가 잘못됐어요!

  2. 완료할 때까지 사용자가 게시하지 않도록 합니다.자바스크립트와 약간의 CSS로 이것을 할 수 있을 것입니다.기억으로는 메타태그로 할 수 있는 방법이 있을 것 같은데 IE만 가능할 것 같습니다.

  3. 반응을 일찍 씻어내는 것을 보고 싶습니다.대본 매니저 이후가 가장 좋을 것 같습니다.하지만 당신은 약간의 실험이 필요할지도 모릅니다.

  4. 보기 상태가 비대해 보이면 IIS에서 GZip 압축을 설정합니다.

  5. 보기 상태가 너무 커져 GZip 압축을 켤 수 없거나 원하지 않는 부작용이 있는 경우.그런 다음 보기 상태를 압축 및 압축 해제할 수 있습니다.http://www.codeproject.com/KB/viewstate/ViewStateCompression.aspx

  6. 그래도 보기 상태가 계속 확대되면 보기 상태를 로컬로 저장할 수 있습니다.http://blog.arctus.co.uk/articles/2007/04/23/advanced-asp-net-storing-viewstate-in-a-database/ 은 좋은 출발점입니다.

단일 서버를 수행하는 경우에도 고정 시스템 키를 사용합니다.

이 문제는 시스템 키에 대해 자동 구성을 사용할 때 발생하며 앱 도메인이 재활용될 때마다 새 구성이 나타납니다.이는 보기 상태 유효성 검사, 동적 리소스 쿼리 문자열 암호 해독 및 인증 티켓[기계 키의 다른 용도 삽입]에 영향을 미칩니다.

보기 상태가 너무 클 때 이런 문제를 본 적이 있습니다.프레디가 설명하는 문제 때문에 그런 일이 일어나는 것을 보았습니다.

저는 일반적으로 Viewstate를 사용하는 것을 싫어합니다.View 상태를 모두 해제할 수 있습니까?

저도 이 문제를 겪고 있으며, 제가 찾은 모든 블로그에서 언급된 모든 것(고정된 컴퓨터 키, 보기 상태 크기 등)을 시도했습니다.오류가 ScriptResource에 대한 요청에 로그온한 시간의 99%입니다.axd. Win 2003 서버에서 .net 3.5 SP1을 사용하고 있습니다.이 앱은 50/50의 균형을 맞춘 두 개의 병렬 동일 서버에서 호스팅됩니다.각 서버에는 동일한 컴퓨터 키가 있습니다.

일반적으로 이 오류는 저와 크게 관련이 없지만, 3개월 동안 발생 추세가 크게 상승했습니다.

이 오류가 보기 상태가 UrlEncoded/HtmlEncoded 또는 UrlDecoded가 올바르게 되지 않은 것과 관련이 있다고 생각하는 사람이 있습니까?보기 상태 내에 일부 브라우저가 인코딩된 값으로 대체하는 문자 하위 집합이 있을 수 있습니다.그게 말이 되는지 모르겠네요.

제 생각에, 당신은 반드시 asx 페이지에서 사용해야 할 것 같습니다.

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">

이것이 나의 문제를 해결합니다.

영어가 아닌 운영 체제를 실행하고 있습니까?

"NT Authority\"NT Authority되었습니다.네트워크 서비스"는 다른 언어로 지역화되어 있습니다.
안타깝게도 많은 프로그램에서 계정 이름이 영어 이름으로 하드 코딩되어 있고 Windows(윈도우)의 다른 버전에서 실행될 때 네트워크 서비스를 찾지 못해 이벤트 로그에 모든 종류의 펑키 오류가 발생합니다.

저는 이 문제를 Trend Micro 안티바이러스를 사용하는 사용자로 범위를 좁혔으며 2009년 5월 21일에 Trend Micro 소프트웨어를 업데이트한 후 오류가 발생하기 시작했습니다.이 날짜 이전에는 오류가 없습니다.

문제는 IE8의 미리 보기 다운로드 프로그램인 것 같습니다.

이는 상당히 불분명한 상황에서만 IE8에 영향을 미치는 것으로 보입니다.URL에 추가된 4k 청크의 데이터가 종종 서버에 의해 삭제되기 때문에 무시됩니다.가능성을 높이는 것 중 하나는 느린 네트워크 연결입니다.아래 리소스 중 하나에 있는 사람이 뉴질랜드에 있는 고객들과만 문제가 있다고 언급했습니다.

많은 사람들이 두 개의 개별적인 문제를 설명하고 있는데, 그 중 하나는 위의 질문(잘못된 형식의 URL이 서버로 전송됨)에 설명되어 있습니다.

http://connect.microsoft.com/VisualStudio/feedback/details/434997/invalid-webresource-axd-parameters-being-generated

미리 보기 다운로드 프로그램이 수정되었음을 설명하는 문서:

http://blogs.msdn.com/b/ieinternals/archive/2010/04/01/ie8-lookahead-downloader-fixed.aspx

KB980182 – 문제가 해결된 누적 업데이트:

http://support.microsoft.com/kb/980182

참고: 미리 보기 다운로드 프로그램에서 스크립트를 검색할 수 없는 경우 스크립트가 자동으로 다시 다운로드되므로 .axd 파일의 유효성을 검사하지 않은 이전 유효성 검사 모드로 다시 변경하여 문제의 증상을 제거할 수 있습니다.

<httpRuntime requestValidationMode="2.0" />

언급URL : https://stackoverflow.com/questions/728513/erratic-invalid-viewstate-issue-in-a-net-application

반응형