ViewStateUserKey +共享主机+ ViewStateMac验证失败(ViewState

2019-07-29 16:47发布

所以,问题很简单,尽管我开始疑惑这是否会得到回答...

我有一个网站,在这里我想保护我的视图状态与推荐ViewStateUserKey ..

在我的基地页(从页继承明显)我有这样的代码:

    protected override void OnInit(EventArgs e)
    {
        base.OnInit(e);

        if (User.Identity.IsAuthenticated)
            base.ViewStateUserKey = Session.SessionID;
    }

作品在localhost好,但是,当我把它上传到主机(共享我们的本地供应商的一个托管提供),它给传统的“验证视图状态MAC失败”的错误后,我进行身份验证。 如果我出评论这个代码,它完美的作品,所以我1000%肯定这是原因。

什么是对共享主机进行安全视图状态的最佳方法? 我已经设置ViewStateMac =“启用”为好。 是否足够或有什么建议的解决方法?

Answer 1:

从玩是本地主机上,而不是在服务器上的那一刻则在我看来,你有对话的一些问题,以及会话ID是服务器上的变化/到期快,比认证过期快。

出于这个原因,从当时的用户看到的页面,到后期它的会话已过期或身份验证变更前变更,所以会话ID是diferent,所以你得到这个错误。

其他的认为,你可以看看是你设置machineKey在web.config中。

更新

与斯科特比较你的代码中有做出不同的。 斯科特使用的用户名,是不会改变的一切,您使用的SessionID,就像我说的,可以改变。

对我来说,醚使用什么斯科特建议,用户名,乙醚是不是也发生变化,如用户例如cookie的一些其他的价值,即是改变不了的那么容易。

所以从斯科特http://www.hanselman.com/blog/ViewStateUserKeyMakesViewStateMoreTamperresistant.aspx

void Page_Init (Object sender, EventArgs e)
{ 
   if (User.Identity.IsAuthenticated)
      ViewStateUserKey = User.Identity.Name;
}

这是斯科特检查,如果用户通过验证,由于得到了他的名字的原因。 如果你用会话ID,或用户的Cookie去,你并不需要检查,如果被验证。

现在,如果你使用cookie来设置他们viewstateuserkey,为所有用户,则一个不允许的cookie,并尽量使任何后会出现错误。 因此,认为这样的一个解决方案来处理他们

https://stackoverflow.com/a/2551810/159270



文章来源: ViewStateUserKey + shared hosting + ViewStateMac validation failure