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 开始, Int32 长度, Boolean useValidationSymAlgo) +164
System.Web.UI.Page.DecryptString(String s) +83
System.Web.Handlers.AssemblyResourceLoader.System.Web.IHttpHandler.ProcessRequest(HttpContext context) +148
System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +358 System.Web.HttpApplication.ExecuteStep(IExecutionStep 步骤, Boolean & completedSynchronously) +64

这发生在对特定 WebResource.axd 请求的请求上。

我们看到的另一个错误是:

视图状态 MAC 验证失败。如果此应用程序由 Web Farm 或集群托管,请确保配置指定相同的 validationKey 和验证算法。AutoGenerate 不能在集群中使用。说明:执行当前 Web 请求期间发生未处理的异常。请查看堆栈跟踪以获取有关错误及其源自代码的位置的更多信息。

异常详细信息:System.Web.HttpException:视图状态 MAC 验证失败。如果此应用程序由 Web Farm 或集群托管,请确保配置指定相同的 validationKey 和验证算法。AutoGenerate 不能在集群中使用。

发布表单时偶尔会发生此错误。

现在,在您介入并告诉我此错误的明显(通常)答案之前,请考虑一下:

  • 应用程序部署到 IIS6 上的 Windows Server 2003
  • 它不在网络场上。这里只使用了一个网络服务器。
  • 应用程序池标识是一个自定义服务帐户,我确实aspnet_regiss -ga <username>在服务器上运行。没有效果。
4

3 回答 3

24

该错误是因为您的 appdomain 已被回收/重新启动。当发生这种情况时,应用程序和机器密钥设置为自动,它会改变。这会影响资源 url (.axd) 的 url 中信息的解密。设置一个固定的机器密钥将防止它再次发生。

请检查此以获取有关类似案例的更多信息(解释与视图状态验证问题有关,但原因相同): http: //www.developmentnow.com/blog/InvalidViewstate+Or+Unable+To+验证+数据+错误.aspx

我也想了很久。在我看到这个问题后,它又让我想到了:这是企图破坏我的 ASP.Net 站点的安全性吗?...我刚刚回答的非常相似。我有一种感觉,它是在重新启动某些东西,因为当我们发布了一些回收应用程序的东西时,日志中显示了错误,但我没有任何其他来源说明它的关系(今天我在 invalidviewstate 上发现了这种情况,因为机器键更改:))

附言。上面终于在单个服务器上解释了它:)

于 2009-03-06T07:31:26.517 回答
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 解释了原因。

我不明白的是微软提供有时不起作用的选项的原因,或者至少为什么它们不默认为可靠选项的原因。

于 2008-11-21T22:37:09.833 回答