문제

나는 MVC 사이트의 오류를 처리하기 위해 Elmah를 사용하고 있으며 지난 몇 주 동안 암호화성이 발생한다는 것을 알았습니다. 메시지는 다음과 같습니다.

System.security.cryptography.cryptographicexception : 패딩은 유효하지 않아 제거 할 수 없습니다.

System.Web.mvc.httpantiforgeryException : 필수 반 멍청한 토큰이 제공되지 않았거나 유효하지 않았습니다. ---> System.Web.httpException : ViewState Mac의 유효성 검사에 실패했습니다. 이 응용 프로그램이 웹 팜 또는 클러스터에서 호스팅되는 경우 구성이 동일한 유효성 검사장 및 유효성 검사 알고리즘을 지정하는지 확인하십시오. 자가 생성은 클러스터에서 사용할 수 없습니다. --->

응용 프로그램은 클러스터에서 실행되지 않으며 이러한 오류를 재현 할 수없는 것 같습니다. 그들은 손으로 만들어진 게시물이 아닌 유효한 요청처럼 보이며 __requestVerificationToken 쿠키를 포함합니다. 페이지에는 양식 (내 로그인 양식) 내부에 필요한 HTML 헬퍼가 있습니다.

아직 사용자 불만이 없었기 때문에 결국 로그인하려는 사람에게 효과가 있다고 가정하지만 왜 이런 일이 일어날 수 있는지 궁금합니다.

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

도움이 되었습니까?

해결책

상관 관계가 있는지 확실하지 않지만 로그인 작업을 제외한 robots.txt 파일을 추가 한 후에는 더 이상 이러한 오류가 표시되지 않습니다. 크롤러가 페이지를 치고 로그인 작업을 호출하려고하는 것과 관련이 있다고 생각합니다.

편집하다: 응용 프로그램 풀이 재활용 된 후 오래된 쿠키를받을 때이 문제도 볼 수 있습니다. Application Resparts에서 검증/암호 해독 키의 변경이 원망 될 수있는 오래된 쿠키에 영향을 미치지 않도록 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( "~" );
        }
    }

다른 팁

나는 이것이 antiforgery 시스템과 구체적으로 관련이 있는지 확신하지 못한다. 내부 예외는 'ViewState Mac의 검증이 실패했다'고 말할 수있는 것에서 antiforgery 시스템의 기본 인프라는 뷰 스테이트에 의존한다 ( 실제로 당신이 여기서 살펴보세요 의존성과 공포 (바닥의 CreateFormatterGenerator 메소드)를 볼 수 있습니다.

ViewState Mac이 가짜 요청에 실패한 이유에 관해서는, 나는 확실하지 않지만, antiforgery 토큰 (전체 가짜 요청을 처리)을 실질화시키는 데 존재하는 공포를 감안할 때 전혀 놀랍지 않습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top