2009-11-02 7 views
7

MVMA 사이트의 오류를 처리하는 데 ELMAH를 사용하고 있으며 지난 몇 주 동안 일부 CryptographicExceptions이 발생했습니다. 메시지는 다음과 같습니다.ASP.MVC 위조 방지 토큰 및 암호화 오류

System.Security.Cryptography.CryptographicException : 채우기가 잘못되어 제거 할 수 없습니다.

System.Web.Mvc.HttpAntiForgeryException : 필수 위조 토큰이 제공되지 않았거나 이 제공되지 않았거나 유효하지 않습니다. ---> System.Web.HttpException : 확인 viewstate MAC 실패했습니다. 이 응용 프로그램이 웹 팜 또는 클러스터에서 호스팅되는 경우 구성이 동일한 validationKey 및 유효성 검사 알고리즘을 지정하는지 확인하십시오. AutoGenerate는 클러스터에서 사용할 수 없습니다. --->

응용 프로그램이 클러스터에서 실행되고 있지 않으며 이러한 오류를 재현하지 못하는 것 같습니다. 손으로 만든 게시물이 아닌 유효한 요청처럼 보이며 __RequestVerificationToken 쿠키가 포함되어 있습니다. 양식 (내 로그인 양식) 안에 필요한 HTML 도우미가 페이지에 있습니다.

사용자 불만이 아직 없었으므로 로그인을 시도하는 사람이라면 누구나 사용할 수 있다고 추측합니다.하지만 어떻게 될지 궁금해졌습니다.

다른 사람이이 동작을 보거나 예외를 진단하는 방법에 대한 아이디어가 있습니다. 말했듯이 실패 할 수는 없습니다. FF에서 쿠키를 삭제하면 다른 오류가 발생합니다. 페이지에서 숨겨진 토큰 입력 내용을 수정하는 것과 마찬가지로 쿠키를 수정 (내용을 변경 또는 제거)하면 다른 오류가 발생합니다.

답변

4

상관 관계가 있는지 확실하지 않지만 로그인 동작을 제외한 robots.txt 파일을 추가 한 후에 더 이상 이러한 오류가 표시되지 않습니다. 크롤러가 페이지를 때리고 로그인 작업을 호출하려고 할 때 의심 스럽습니다.

EDIT : 응용 프로그램 풀이 재활용 된 후에 오래된 쿠키를 받으면이 문제가 나타납니다. 필자는 machineKey를 명시 적으로 설정하여 응용 프로그램 재시작시 검증/암호 해독 키를 변경해도 재전송 할 수있는 오래된 쿠키에는 영향을주지 않도록했습니다.

사이트를 업데이트하고 고정 된 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("~"); 
     } 
    } 
+0

machineKey가 올바른 해결책이었습니다. –

+0

비슷한 경험 - ASP.NET MVC 2로 마이그레이션 한 후 내 블로그가 일시적으로 중단되기 시작했습니다.machineKey가 추가되었으며 문제가 해결되었습니다. –

1

나는 이것이 위장 방지 시스템과 특별히 관련이 있다고 확신하지 못합니다. 내부 예외 상태는 'viewstate MAC의 검증에 실패했습니다.'라고 말할 수 있습니다. 위조 방지 시스템의 기본 인프라는 종속성이 있습니다. viewstate (실제로는 take a look here이면 종속성과 공포 (하단의 CreateFormatterGenerator 메소드) 참조).

가짜 요청에서 viewstate mac이 실패하는 이유는 확실하지 않지만 위조 지폐 토큰을 디시리얼라이싱하는 데 존재하는 공포를 감안할 때 전혀 놀랄만 한 것은 아닙니다. ..