我使用ELMAH来处理我的MVC网站错误,我注意到,在过去几个是我越来越投入了一些CryptographicExceptions周。该消息是:

  

System.Security.Cryptography.CryptographicException:填充是无效,并且不能被去除

。      

System.Web.Mvc.HttpAntiForgeryException:   一个必需的防伪标记不   供给或无效。 --->   System.Web.HttpException:验证   视图状态的MAC失败。如果这   应用程序是由Web场或托管   产业集群,确保   配置指定了相同   validationKey和验证   算法。自动生成不能使用   在集群中。 --->

在应用程序未在群集中运行和我似乎无法重现这些错误。它们看起来像有效的请求 - 不是一个手工制作的后期 - 并且确实包含了__RequestVerificationToken饼干。我有在页面上所需的HTML帮助,形式(我的登录表单)内。

我还没有任何用户投诉,但是,所以我假设最终它适用于任何人试图登录,但我在想为什么这可能发生。

任何人看到这种行为,或对如何诊断异常任何想法 - 就像我说的,我不能让它失败。删除在FF的cookie来了一个不同的错误。修改的cookie(更改或删除的内容)也导致一个不同的错误一样,修改所述网页上的隐藏的标记输入的内容。

有帮助吗?

解决方案

我不知道是否有相关性,但补充说,不包括我的登录操作的robots.txt文件后,我不再看到这些错误。我怀疑它与履带击中页面,并试图援引登录动作做。

修改:我也看到这个问题接受旧饼干当应用程序池已回收后。我使出设置的machineKey明确,这样的变化对应用程序重新启动验证/解密密钥不影响可能重发旧的饼干。

更新网站和去固定的machineKey我发现我仍然得到的人谁从以前的版本有饼干这些错误之后。作为一个临时的解决办法我已经添加了以下的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( "~" );
        }
    }

其他提示

我不敢肯定这有什么特别做的防伪系统,内部异常状态“视图状态MAC的验证失败。”,从我所知道的,对于防伪系统默认的基础设施,对依赖视图状态(实际上,如果你这里看看你会看到看到的依赖性和恐怖(在底部的CreateFormatterGenerator方法))。

至于为什么视图状态MAC在假请求失败,我不sure-但鉴于存在反序列化防伪标记(处理整个假的请求)的恐怖,它不会吃惊的我。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top