2013-10-15 4 views
0

보안 솔루션

좋아요 환경에 실패, 그래서 여기에 중복을 만들 수 없습니다 노력하고있어,하지만 난이 질문 종류의 이전에 해결 된 것으로 알고 있습니다.

나는 오류에 읽기의 무리를 해왔 :

Validation of viewstate MAC failed. If this application is hosted by a Web Farm or cluster, ensure that configuration specifies the same validationKey and validation algorithm. AutoGenerate cannot be used in a cluster.

나는 우리가 우리의 네트워크 모니터링 소프트웨어 및 SQL 버전을 업그레이드 후 오류가 발생하기 시작했다.

이 페이지는 표시되는 사이트의 외부에있는 ASP.NET 4.0 웹 양식으로, JavaScript와 약간의 SQL을 사용하여 C#으로 작성되었습니다. 또한 .NET의 차트 양식을 많이 사용합니다 (차트의 6 개 차트 영역과 마찬가지로 SQL을 통해 여러 시리즈가 동적으로 생성됨). SQL Server 2008 R2의 무료 버전에서 전체 SQL Server 2012 인스턴스 평가판으로 이동하여 SolarWinds Orion 버전을 NPM 10.6으로 업데이트했습니다.

이 코드는 각 네트워크에서 평균화 된 다양한 통계의 상태를 추적하는 대형 차트 프로그램입니다. 문제는 자동 스크롤을 의미하는 '스크롤링 차트'를 요구한다는 것입니다. 차트가 특정 통계, 네트워크, 페이지 및 시간 창에 머물 수 있도록 다양한 변수가 있으므로 메타 또는 전체 포스트 백 대신 양식 새로 고침을 사용하므로 사용자가 혼자 남겨 둘 때 새로 고침하여 원래보고 있던 뷰를 유지합니다. 5 분이 넘지 않으면 업데이트를 계속합니다. 이러한 모든 값은 ViewState에 저장됩니다. (원래 페이지의 숨겨진 리터럴에 저장되는 것이 더 나빴습니다.)

소프트웨어를 업데이트해도 마술처럼 웹 팜이나 클러스터로 바뀌지는 않았지만 곧 우리가 가상 환경을 갖지는 않습니다.

연구는

나는 문제가 실패 할 키의 유효성 검사를 불편한 시간에 상쾌하고 원인의 ViewState에 의해 발생 이해할 수 있기 때문에 검사 ​​알고리즘과 동기화 페이지가로드. 나는이 같은 유사한 질문과 답변을 많이 봤어요 :

ASP.NET Validation of viewstate MAC failed

Validation of viewstate MAC failed when on page for 20+ minutes

ScriptResource error: am I being hacked?

틀림

http://aspadvice.com/blogs/joteke/archive/2006/02/02/15011.aspx

,이 Microsoft 당 고객이 직면 아니지만, :

This attribute should never be set to false in a production Web site, even if the >application or page does not use view state. The view state MAC helps ensure the security >of other ASP.NET functions in addition to view state.

,210

내 질문 :

이 답변은 모두 동일한 솔루션을 갖고있는 것 같다 나는 그 좋은 솔루션입니다 확신 아니에요. 내가 가질 수있는 대안은 무엇입니까? 상급자와 나는 보안 관점에서 키 설정이 좋다고 생각하지 않습니다. 나는 물건을 다른 방법으로 저장하기 위해 코드를 조정할 용의가있다. 나는 다른 곳에서 세션 상태를 사용해야했지만 아직 그것에 익숙하지 않다. 일종의 유효성 검사가 시작되기 전에 비슷한 문제가 발생합니까? 새로 고침이 더 느리게 실행되도록 할 수 있습니까? 또한 핵심 유효성 검사가 발생하는 부분을 변경하는 방법을 살펴 보았습니다. 보안 관점에서 볼 때 그 솔루션은 무엇입니까?

답변

0

우선, 나는 마침내 내 오류를 추적 할 수있었습니다. 그것은 실제로 닷넷 차트가 처리되지 않은 NullReference Exception (derp)을 던지고 있다는 것을 의미하는 SQL Server 교착 상태를 실제로 관리하는 것으로 나타났습니다.

그래, ASP.NET에는 단지 alternatives to ViewState 밖에 없습니다. 마침내 내 페이지가 작동하므로 여기를 임의로 건너편에있는 사람에게 남겨두고 있습니다.

<machineKey 
    validationKey="[128 Hex Number]" 
    decryptionKey="[64 Hex Number" 
    validation="SHA1" 
    decryption="AES" /> 

내가 보안을 위해 이것에 대해 적당히 우려했다 : 다음

<pages enableViewStateMac="true"> 

과 : 당신은 너무 여기에 볼 수있는 대안의

하나는 set the machine key 등 같은 MAC 주를 활성화하는 것입니다 이유가 있지만 다른 솔루션을 만들 수는 없습니다.

static void Main(string[] argv) 
    { 
     //128 Hex characters for the validation key, 64 for the AES decryption key 
     int hexLengthForEncryption = 128; 

     string validationKey = Generate_New_Key(hexLengthForEncryption, argv); 

     hexLengthForEncryption = 64; 

     string decryptionKey = Generate_New_Key(hexLengthForEncryption, argv); 

     string[] originalKeys = new string[2] {validationKey, decryptionKey}; 

     Generate_File(originalKeys); 

     Console.WriteLine("The file has been generated. Would you like to generate new keys in a new file?"); 

     string yorn = Console.ReadLine(); 

     while ((yorn != "N") && (yorn != "n") && (yorn != "no") && (yorn != "No")) 
     {    
      hexLengthForEncryption = 128; 
      validationKey = Generate_New_Key(hexLengthForEncryption, argv); 
      hexLengthForEncryption = 64; 
      decryptionKey = Generate_New_Key(hexLengthForEncryption, argv); 

      string[] freshLines = new string[2]{validationKey, decryptionKey}; 

      Generate_File(freshLines); 

      Console.WriteLine("The file has been generated. Would you like to generate new keys to a new file?"); 

      yorn = Console.ReadLine(); 
     } 
    } 

완전히하지만, 내 문제가 해결되지 않은 : 나는 결국에 와서 결론은 그냥 정적으로 설정하고 Microsoft's example code를 기반으로 일반에 기계 키를 다시 생성 할 것이라고했다. 결국 조회 페이지가있는 차트에 대해 더 큰 SQL 쿼리에 try catch를 추가하고 및 비슷한 우려 사항이 WITH(NOLOCK) on Stack Overflow인데도 가능한 오류가 허용되는 오류 마진 매개 변수 이내로 떨어질 수 있다고 판단했습니다.

실제로 세션 ID를 염려하는 페이지에서 프로그램을 잠시 중단하고 조회 페이지로 돌아 가야했습니다. 흥미롭게도, 그것은 나와 로그 아웃 한 채로 전혀 충돌하지 않았고, 밤마다 2 분마다 차트가 상쾌 해졌습니다. 여전히 세션 ID를 사용하지 않는 페이지가 메인 페이지에 이런 던져 - 멀리 변수 설정이 있습니다

protected override void OnInit(EventArgs e) 
    { 
     base.OnInit(e); 
     ViewStateUserKey = Session.SessionID; 
    } 

을 그리고 이것은 제어 솔루션이 제대로 작동하려면 :

 //This variable is necessary to having a session state persist across postbacks, but is otherwise useless 
     Session["Throwaway"] = DateTime.Now; 

이 페이지의 Catch는 단순히 자신에게 다시 리디렉션됩니다. 검색 페이지가있는 페이지는 세션 상태 (페이지 생성에 의존하여 차트 생성)로 참조 루프 문제를 일으켰으므로 차트가 비어 있습니다. 나는 이것이 누구에게 도움이 될지 모르지만, 세션 상태를 사용하는 차트와 필요하지 않은 차트는 네트워크 업그레이드 후에 마침내 작동합니다. 건배!