代码之家  ›  专栏  ›  技术社区  ›  Ben Scheirman

WebResource.axd上的“padding无效且无法删除”异常

  •  30
  • Ben Scheirman  · 技术社区  · 16 年前

    我有一个ASP.NET 2.0应用程序,在本地环境中工作正常。当发布到测试服务器时,服务器上会出现间歇性错误。

    最常见的是:

    填充无效,无法删除。 描述:执行当前Web请求期间发生未处理的异常。请查看堆栈跟踪以获取有关错误及其在代码中的来源的更多信息。

    异常详细信息: System.Security.Cryptography.Cryptographic例外: 填充无效,不能为 远离的。

    源错误:

    生成了未处理的异常 在电流执行期间 Web请求。关于 异常的来源和位置 可以使用异常来标识 下面是堆栈跟踪。

    堆栈跟踪:

    [密码例外:填充为 无效,不能删除。]
    system.security.cryptography.rijndaelmanagedtransform.decryptdata(byte[] 输入缓冲区,Int32输入缓冲区,Int32 输入计数,字节[]&输出缓冲区, Int32输出偏移,填充模式 paddingmode,布尔flast)+1545747
    System.Security.Cryptography.RijndaelManagedTransform.TransformFinalBlock(字节[] 输入缓冲区,Int32输入缓冲区,Int32 输入计数+257
    system.security.cryptography.cryptostream.flushfinalBlock()。 +30 system.web.configuration.machinekeysection.encryptordecryptdata(布尔值 fencrypt,byte[]buf,byte[]修饰符, Int32开始,Int32长度,布尔值 使用验证码+164
    system.web.ui.page.decryptString(字符串 S)+ 83
    system.web.handlers.assemblyResourceLoader.system.web.ihtpHandler.processRequest(httpContext 语境)+ 148
    system.web.callHandlerExecutionStep.system.web.httpApplication.ieExecutionStep.Execute()。 +358 system.web.httpapplication.executeStep(iexecutionstep) 步骤,布尔值(同步完成) + 64

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

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

    验证视图状态MAC失败。 如果此应用程序由Web承载 农场或集群,确保 配置指定 相同的validationkey和validation 算法。无法使用自动生成 在一个集群中。 描述:一个 期间发生未处理的异常 当前网站的执行 请求。请查看堆栈跟踪 有关错误的详细信息 以及代码的起源。

    异常详细信息: System.Web.httpException:验证 视图状态MAC失败。如果这样 应用程序由Web场或 集群,确保 配置指定相同 验证密钥和验证 算法。无法使用自动生成 在一个集群中。

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

    现在,在您跳进去告诉我这个错误的明显(通常)答案之前,请考虑一下:

    • 应用程序部署到iis6上的Windows Server 2003
    • 它不在Web场上。此处仅使用一个Web服务器。
    • 应用程序池标识是一个自定义服务帐户,我确实运行过 aspnet_regiss -ga <username> 在服务器上。没有效果。
    3 回复  |  直到 14 年前
        1
  •  24
  •   Community ahmed    7 年前

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

    有关类似情况的详细信息,请检查此项(说明与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? …我刚才的回答也差不多。我有一种感觉,它是关于某个东西的重新启动的,因为当我们发布一些回收应用程序的东西时,日志中显示了错误,但是我没有任何其他来源来说明它的关系(今天我发现了由于machinekey更改而导致的invalidviewstate案例:)

    上面最后在单服务器上解释了它:)

        2
  •  1
  •   Community ahmed    7 年前

    当在浏览器中完全加载页面之前生成文章时,会出现此问题。看一看 this 问题。

        3
  •  0
  •   JohnL    16 年前

    本,

    对于你的第一个问题,我发现这似乎是一个有点多的点,你所看到的问题是偶尔发生。 你应该能在 http://www.codeproject.com/KB/security/Cryptor.aspx#aes .

    您真正需要做的是将rijndaellg.padding设置为paddingmode.iso10126、paddingmode.pkcs7或paddingmode.ansix923。如果在加密和解密时使用相同的值,那么这3个值中的任何一个都可以工作。其他值可用于某些数据,但不适用于所有数据。上面的URL解释了原因。

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