asp.net WebResource.axd上的“填充无效且无法删除”异常

7rtdyuoh  于 12个月前  发布在  .NET
关注(0)|答案(3)|浏览(123)

我有一个ASP.NET2.0应用程序,在我们的本地环境中工作正常。当发布到测试服务器时,我们在服务器上得到间歇性的错误。
以下是最常见的:
填充无效,无法删除。描述:在执行当前Web请求期间发生未处理的异常。请查看堆栈跟踪以了解有关错误及其在代码中起源的详细信息。
异常详细信息:System.Security.Cryptography.CryptographicException:填充无效,无法删除。
错误代码:
在执行当前Web请求期间生成了未处理的异常。有关异常的来源和位置的信息可以使用下面的异常堆栈跟踪来标识。
堆栈跟踪:
[CryptographicException:填充无效,无法删除。]
系统.安全.密码.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[] modifier,Int32 start,Int32 length,Boolean useValidationSymAlgo)+164
System.Web.UI.Page.DecryptString(String s)+83
System.Web.Handlers.AssemblyResourceLoader.System.Web. IHttpRequest.ProcessRequest(HttpContext context)+148
System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()+358 System.Web.HttpApplication.ExecuteStep(IExecutionStep step step,Boolean& completedSynchronously)+64
这发生在对特定WebResource.axd请求的请求上。
我们看到的另一个错误是:

**viewstate MAC验证失败。如果此应用程序由Web场或群集托管,请确保配置指定相同的validationKey和验证算法。AutoGenerate不能在群集中使用。**描述:在执行当前Web请求期间发生未处理的异常。请查看堆栈跟踪以了解有关错误及其在代码中起源的详细信息。

异常详细信息:System.Web.HttpException:视图状态MAC验证失败。如果此应用程序由Web场或群集承载,请确保配置指定相同的validationKey和验证算法。AutoGenerate不能在群集中使用。
这个错误偶尔会发生在发布表单时。
现在,在你跳进去告诉我这个错误的明显(通常)答案之前,考虑一下:

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

xxb16uws1#

该错误是因为您的appdomain被回收/重新启动。当发生这种情况时,应用程序和机器密钥设置为自动,它会发生变化。这会影响资源url(.axd)的url中的信息的解密。设置固定的机器密钥将防止它再次发生。
请检查此以了解类似情况的更多信息(解释是视图状态验证的问题,但原因是相同的):https://developmentnow.com/2006/02/14/invalid_viewstate-or-unable-to-validate-data-error/
我也想了很长时间,看到这个问题后,我又想了一遍:这是企图破坏我的ASP.NET网站的安全性吗?.我只是回答了非常相同.我有感觉这是围绕一些重新启动的东西,因为当我们发布的东西,回收应用程序的错误显示在日志中,但是我没有任何其他的来源来说明它的关系(今天我在invalidviewstate上发现了这个案例,因为机器密钥发生了变化:)
以上最后在单服务器上解释了它:)

r7xajy2e

r7xajy2e2#

当页面在浏览器中完全加载之前生成帖子时会出现此问题。请查看this问题。

bihw5rsg

bihw5rsg3#

本,
对于你的第一个问题,我发现这个问题似乎更接近你所看到的问题,因为这个问题是偶尔发生的。你应该能够在http://www.codeproject.com/KB/security/Cryptor.aspx#aes上找到对此的完整解释。
您真正需要做的是将RijndaelAlg.Padding设置为PaddingMode.ISO10126,PaddingMode.PKCS7或PaddingMode.ANSIX923。这三个值中的任何一个都应该有效,前提是您在加密和解密时使用相同的值。其他值将对某些数据有效,但不是所有数据。上面的URL解释了为什么。
我不明白的是为什么微软提供的选项有时不起作用,或者至少为什么他们不默认为一个可靠的选项。

相关问题