7

ELMAHを使用してMVCサイトのエラーを処理していますが、過去2週間で、CryptographicExceptionsがスローされることに気づきました。メッセージは次のとおりです。

System.Security.Cryptography.CryptographicException:パディングが無効であり、削除できません。

System.Web.Mvc.HttpAntiForgeryException:必要な偽造防止トークンが提供されていないか、無効でした。---> System.Web.HttpException:ビューステートMACの検証に失敗しました。このアプリケーションがWebファームまたはクラスターによってホストされている場合は、構成で同じvalidationKeyと検証アルゴリズムが指定されていることを確認してください。AutoGenerateはクラスターでは使用できません。--->

アプリケーションがクラスターで実行されておらず、これらのエラーを再現できないようです。それらは有効なリクエストのように見えます-手作りの投稿ではありません-そして__RequestVerificationTokenクッキーを含んでいます。フォーム(ログインフォーム)内のページに必要なHTMLヘルパーがあります。

ユーザーからの苦情はまだないので、最終的にはログインしようとしている人なら誰でもうまくいくと思いますが、なぜこれが起こるのか疑問に思っています。

他の誰かがこの振る舞いを見たり、例外を診断する方法について何か考えを持っている-私が言ったように、私はそれを失敗させることはできません。FFでCookieを削除すると、別のエラーが発生します。Cookieを変更する(コンテンツを変更または削除する)と、ページに入力された非表示のトークンのコンテンツを変更する場合と同様に、別のエラーが発生します。

4

2 に答える 2

4

相関関係があるかどうかはわかりませんが、ログインアクションを除外するrobots.txtファイルを追加した後、これらのエラーは表示されなくなりました。クローラーがページにアクセスしてログインアクションを呼び出そうとしていることが関係しているのではないかと思います。

編集:アプリケーションプールがリサイクルされた後に古いCookieを受け取ったときにもこの問題が発生します。アプリケーションの再起動時に検証/復号化キーを変更しても、再送される可能性のある古いCookieに影響を与えないように、machineKeyを明示的に設定することにしました。

サイトを更新して固定のmachineKeyにアクセスした後、以前のバージョンのCookieを使用していたユーザーからこれらのエラーが発生していることがわかりました。一時的な回避策として、次の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( "~" );
        }
    }
于 2009-11-24T21:20:44.163 に答える
1

これが特に偽造防止システムと関係があるかどうかはわかりませんが、内部例外は「ビューステートMACの検証に失敗しました」と述べています。私が知る限り、偽造防止システムのデフォルトのインフラストラクチャはビューステートに依存しています(実際、ここを見ると、依存関係と恐怖(下部にあるCreateFormatterGeneratorメソッド)がわかります。

ビューステートマックが偽のリクエストで失敗する理由については、よくわかりませんが、偽造防止トークンの逆シリアル化(偽のリクエスト全体の処理)に存在する恐怖を考えると、まったく驚きません。

于 2009-11-03T22:40:35.650 に答える