ASP.MVC防伪令牌和加密错误

6
我正在使用ELMAH来处理我的MVC网站中的错误,我注意到在过去几周中,我遇到了一些CryptographicExceptions异常。异常信息如下:
System.Security.Cryptography.CryptographicException: 填充无效且无法移除。 System.Web.Mvc.HttpAntiForgeryException: 未提供或无效的所需防伪令牌。 ---> System.Web.HttpException: 视图状态MAC验证失败。如果此应用程序由Web Farm或集群托管,请确保配置指定相同的validationKey和validation算法。AutoGenerate不能在集群中使用。---> 该应用程序并未运行在集群中,我无法重现这些错误。它们看起来像是有效的请求--而不是手工提交的post请求--并且包含__RequestVerificationToken cookie。我在页面上的表单中有必需的HTML助手(我的登录表单)。
目前还没有用户投诉,所以我假设最终能够成功登录,但我想知道为什么会出现这种情况。
是否有其他人遇到过这种情况?或者有任何关于如何诊断异常的想法--就像我说的,我无法使其失败。在FF中删除cookie会出现不同的错误。修改cookie(更改或删除内容)也会导致不同的错误,修改页面上隐藏的token输入内容也会产生不同的错误。
2个回答

4

我不确定是否有关联,但在添加了一个排除登录操作的robots.txt文件后,我不再看到这些错误。我怀疑是由于网络爬虫访问页面并尝试调用登录操作所致。

编辑: 当应用程序池重新启动后接收旧cookie时,我也看到了这个问题。我已经明确设置了machineKey,以便在应用程序重新启动时更改验证/解密密钥不会影响可能被重新发送的旧cookie。

在更新网站并转到固定的machineKey后,我发现仍然从先前版本中拥有cookie的人那里收到这些错误。作为临时解决办法,我添加了以下Application_Error处理程序:

    public void Application_Error()
    {
        var exception = Server.GetLastError().GetBaseException();
        if (exception is System.Security.Cryptography.CryptographicException)
        {
            Server.ClearError();
            if (Request.IsAuthenticated)
            {
                var form = new FormsAuthenticationWrapper();
                form.SignOut();
                Session.Clear();
            }
            Response.Cookies.Clear();
            Response.Redirect( "~" );
        }
    }

类似的经历 - 我将我的博客迁移到ASP.NET MVC 2后,它开始间歇性地崩溃。添加了machineKey之后问题就解决了。 - user151323

1

我不确定这与防伪系统有任何特定关系,内部异常状态为“验证视图状态 MAC 失败”。据我所知,防伪系统的默认基础设施依赖于视图状态(实际上,如果你在这里看看,你会看到依赖和恐怖(底部的 CreateFormatterGenerator 方法)。

至于为什么虚假请求中的视图状态 mac 失败,我不确定——但考虑到反序列化防伪令牌(处理整个虚假请求)中存在的恐怖,这一点并不让我感到惊讶。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接