gpt4 book ai didi

c# - ViewStateUserKey + 共享主机 + ViewStateMac 验证失败

转载 作者:太空宇宙 更新时间:2023-11-03 14:00:20 25 4
gpt4 key购买 nike

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

我有一个网站,我想在其中使用推荐的 ViewStateUserKey 来保护我的 View 状态。

在我的基本页面(显然是从 Page 继承的)中,我有以下代码:

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

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

在本地主机上运行良好,但是,当我将其上传到主机(由我们的本地提供商之一提供的共享主机)时,它会在我进行身份验证后给出传统的“Viewstate MAC 验证失败”错误。如果我注释掉这段代码,它会完美运行,所以我 1000% 确定这就是原因。

在共享主机上执行 View 状态安全的最佳方法是什么?我也已经设置了 ViewStateMac="Enabled"。是否足够或推荐的解决方法是什么?

最佳答案

从在本地主机上播放而不是在服务器上播放的那一刻起,在我看来你的 session 有一些问题,并且 sessionID 在你的服务器上变化/过期很快,比身份验证过期更快。

因此,从用户看到页面到发布页面, session 已过期或在身份验证更改之前发生更改,因此 session ID 不同,因此您会收到此错误。

其他人认为你可以看是你在 web.config 上设置了 machineKey

更新

将您的代码与您制作的不同的 Scott 进行比较。 Scott 使用用户名,这根本不会改变,而您使用 sessionid,它可以像我说的那样改变。

对我来说,ether 使用 Scott 建议的用户名,ether 一些其他不变的值,例如用户的 cookie,这不是那么容易改变的。

来自 Scott http://www.hanselman.com/blog/ViewStateUserKeyMakesViewStateMoreTamperresistant.aspx

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

这就是 scott 检查用户是否已通过身份验证的原因,因为它获取了他的名字。如果您使用 sessionid 或用户的 cookie,则无需检查是否已通过身份验证。

现在,如果您使用 cookie 将它们设置在 viewstateuserkey 上,那么对于所有不允许 cookie 的用户,并尝试发布任何帖子都会出错。所以想想这样的解决方案来处理它们

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

关于c# - ViewStateUserKey + 共享主机 + ViewStateMac 验证失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10862258/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com