30

ローカル環境で正常に動作する ASP.NET 2.0 アプリケーションがあります。テスト サーバーに公開すると、サーバーで断続的なエラーが発生します。

最も一般的なものは次のとおりです。

パディングが無効であり、削除できません。説明: 現在の Web 要求の実行中に未処理の例外が発生しました。エラーの詳細とコード内のどこでエラーが発生したかについては、スタック トレースを確認してください。

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

ソース エラー:

現在の Web 要求の実行中に未処理の例外が生成されました。例外の発生元と場所に関する情報は、以下の例外スタック トレースを使用して特定できます。

スタックトレース:

[CryptographicException: パディングが無効であり、削除できません。]
System.Security.Cryptography.RijndaelManagedTransform.DecryptData(Byte[] inputBuffer, Int32 inputOffset, Int32 inputCount, Byte[]& outputBuffer, Int32 outputOffset, PaddingMode paddingMode, Boolean fLast) +1545747
System.Security.Cryptography.RijndaelManagedTransform.TransformFinalBlock(Byte[] inputBuffer, Int32 inputOffset, Int32 inputCount) +257
System.Security.Cryptography.CryptoStream.FlushFinalBlock() +30 System.Web.Configuration.MachineKeySection.EncryptOrDecryptData(Boolean fEncrypt, Byte [] buf、Byte[]修飾子、Int32 start、Int32 length、Boolean useValidationSymAlgo) +164
System.Web.UI.Page.DecryptString(String s) +83
System.Web.Handlers.AssemblyResourceLoader.System.Web.IHttpHandler.ProcessRequest(HttpContext コンテキスト) +148
System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +358 System.Web.HttpApplication.ExecuteStep(IExecutionStep ステップ) , Boolean& completedSynchronously) +64

これは、特定の WebResource.axd リクエストへのリクエストで発生します。

表示されている他のエラーは次のとおりです。

ビューステート MAC の検証に失敗しました。このアプリケーションが Web ファームまたはクラスターによってホストされている場合は、構成で同じ validationKey と検証アルゴリズムが指定されていることを確認してください。AutoGenerate はクラスタでは使用できません。説明: 現在の Web 要求の実行中に未処理の例外が発生しました。エラーの詳細とコード内のどこでエラーが発生したかについては、スタック トレースを確認してください。

例外の詳細: System.Web.HttpException: ビューステート MAC の検証に失敗しました。このアプリケーションが Web ファームまたはクラスターによってホストされている場合は、構成で同じ validationKey と検証アルゴリズムが指定されていることを確認してください。AutoGenerate はクラスタでは使用できません。

このエラーは、フォームの投稿中に時々発生します。

飛び込んで、このエラーに対する明白な (通常の) 答えを教えてくれる前に、次のことを考慮してください。

  • アプリケーションは、IIS6 上の Windows Server 2003 に展開されます。
  • Web ファームではありません。ここでは 1 つの Web サーバーのみが使用されています。
  • アプリケーション プール ID はカスタム サービス アカウントでありaspnet_regiss -ga <username>、サーバー上で実行しました。無効。
4

3 に答える 3

1

この問題は、ページがブラウザに完全に読み込まれる前に投稿が生成された場合に発生します。この質問を見てください。

于 2008-11-21T19:34:30.183 に答える
0

ベン、

あなたの最初の問題については、問題が散発的に発生しているという点で、あなたが見ているもののポイントにもう少しあるように見えるこれを見つけました。これに関する完全な説明はhttp://www.codeproject.com/KB/security/Cryptor.aspx#aesにあります。

実際に行う必要があるのは、RijndaelAlg.Padding を PaddingMode.ISO10126、PaddingMode.PKCS7、または PaddingMode.ANSIX923 に設定することです。暗号化と復号化に同じ値を使用する場合、これら 3 つの値のいずれかが機能するはずです。他の値は一部のデータでは機能しますが、すべてのデータでは機能しません。上記の URL はその理由を説明しています。

私が理解できないのは、Microsoft が時々機能しないオプションを提供する理由、または少なくとも信頼できるオプションをデフォルトに設定しない理由です。

于 2008-11-21T22:37:09.833 に答える