我的ASP.NET 2.0应用程序在我们的本地环境中运行良好。发布到测试服务器时,我们在服务器上出现间歇性错误。
这是最常见的:
填充无效,无法删除。 描述:执行当前Web请求期间发生未处理的异常。请查看堆栈跟踪,以获取有关错误及其在代码中的起源位置的更多信息。
异常详细信息: System.Security.Cryptography.CryptographicException: 填充无效,不可以 除去。
来源错误:
生成了未处理的异常 在执行当前 网络请求。有关的信息 异常的起源和位置 可以使用例外来识别 堆栈跟踪下面。
堆栈追踪:
[CryptographicException:Padding is 无效且无法删除。]
System.Security.Cryptography.RijndaelManagedTransform.DecryptData(字节[] inputBuffer,Int32 inputOffset,Int32 inputCount,Byte []& OutputBuffer中, Int32 outputOffset,PaddingMode paddingMode,Boolean fLast)+1545747
System.Security.Cryptography.RijndaelManagedTransform.TransformFinalBlock(字节[] inputBuffer,Int32 inputOffset,Int32 inputCount)+257
System.Security.Cryptography.CryptoStream.FlushFinalBlock() +30 System.Web.Configuration.MachineKeySection.EncryptOrDecryptData(布尔值 fEncrypt,Byte [] buf,Byte []修饰符, Int32 start,Int32 length,Boolean useValidationSymAlgo)+164
System.Web.UI.Page.DecryptString(字符串 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 步,布尔& completedSynchronously) 64
这发生在对特定WebResource.axd请求的请求上。
我们看到的另一个错误是:
对viewstate MAC的验证失败。 如果此应用程序由Web托管 农场或集群,确保 配置指定 相同的validationKey和验证 算法。无法使用AutoGenerate 在群集中。描述:An 未处理的异常发生在 当前网络的执行 请求。请查看堆栈跟踪 有关错误的更多信息 它起源于代码。
异常详细信息: System.Web.HttpException:验证 视图状态MAC失败。如果这 应用程序由Web Farm托管或 集群,确保 配置指定相同 validationKey和验证 算法。无法使用AutoGenerate 在群集中。
发布表单时偶尔会发生此错误。
现在,在你跳入并告诉我这个错误的明显(通常)答案之前,请考虑一下:
aspnet_regiss -ga <username>
。没效果。答案 0 :(得分:24)
错误是因为您的应用域已被回收/重新启动。当发生这种情况时,应用程序和机器密钥设置为auto,它会发生变化。这会影响资源网址(.axd)网址中信息的解密。设置固定的机器密钥可以防止它再次发生。
请查看此信息以获取有关类似案例的更多信息(解释与viewstate验证存在问题,但原因相同):http://www.developmentnow.com/blog/InvalidViewstate+Or+Unable+To+Validate+Data+Error.aspx
我一直想知道它已经有一段时间了。在我看到这个问题之后,我再次得到了它:Is this an attempt to break my ASP.Net site's security? ...我刚刚回答的问题非常相似。我觉得它是围绕某些东西重新启动的,因为当我们发布了回收应用程序的东西时,错误显示在日志中,但我没有任何其他来源说明它的关系(今天我在invalidviewstate上找到了这个案例,因为机器密钥更改:))
聚苯乙烯。最后在单个服务器上解释了它:)
答案 1 :(得分:1)
在页面在浏览器中完全加载之前生成帖子时会出现此问题。看看this问题。
答案 2 :(得分:0)
钟,
对于你的第一个问题,我发现这似乎有点像你所看到的那个问题是零星发生的问题。 您应该可以在http://www.codeproject.com/KB/security/Cryptor.aspx#aes找到完整的解释。
您真正需要做的是将RijndaelAlg.Padding设置为PaddingMode.ISO10126,PaddingMode.PKCS7或PaddingMode.ANSIX923。只要在加密和解密时使用相同的值,这三个值中的任何一个都应该有效。其他值适用于某些数据,但不适用于所有数据。上述URL解释了原因。
我不明白的原因是Microsoft提供的选项有时不起作用,或者至少为什么它们不会默认为可靠的选项。