gpt4 book ai didi

asp.net-mvc-3 - ASP.NET MVC3 - 反 CSRF 和 session 超时

转载 作者:行者123 更新时间:2023-12-01 14:01:19 24 4
gpt4 key购买 nike

我正在按照此处所述实现防伪框架:

http://weblogs.asp.net/srkirkland/archive/2010/04/14/guarding-against-csrf-attacks-in-asp-net-mvc2.aspx

另外,为了尽量减少编码工作量,我在客户端处理 form.onsumitajaxsend 事件时进行了 token 插入部分。一切正常——直到 session 到期。

在我的应用程序中,当用户 session 超时时,我会显示一个弹出窗口,用户可以在其中重新登录并继续而不刷新当前页面,这样正在进行的工作将是安全的。但这与 Anti-CSRF 逻辑不相符。当用户在超时 session 后尝试重新登录时,这将引发 CSRF 异常,因为 cookie (__RequestVerificationToken_Lw__) 已经过期并且所有 future 的 POST 都将无效,直到下一页刷新。

有什么方法可以将 cookie 结束时间设置为 future 的日期而不是“ session ”?我尝试编辑 Response.Cookie,但这使 cookie 无效。

如有任何帮助,我们将不胜感激。谢谢

最佳答案

在用户 session 结束时(显示弹出窗口时),您是否可以在服务器端设置过期的 httpcookie。

我已经从微软防伪 token 实现中提取了一些代码。

internal static string GetAntiForgeryTokenName(string appPath)
{
if (string.IsNullOrEmpty(appPath))
{
return "__RequestVerificationToken";
}
return "__RequestVerificationToken_" + Base64EncodeForCookieName(appPath);
}

private static string Base64EncodeForCookieName(string s)
{
byte[] bytes = Encoding.UTF8.GetBytes(s);
string text = Convert.ToBase64String(bytes);
return text.Replace('+', '.').Replace('/', '-').Replace('=', '_');
}

下面是在服务器端设置 cookie 的代码。

string antiForgeryTokenName = GetAntiForgeryTokenName(HttpContext.Request.ApplicationPath);
HttpCookie httpCookie = HttpContext.Request.Cookies[antiForgeryTokenName];

HttpCookie httpCookie2 = new HttpCookie(antiForgeryTokenName, httpCookie.Value)
{
HttpOnly = true
//// your domain Domain = ,
//// path Path = ,
//// set path Expires =
};

HttpContext.Response.Cookies.Set(httpCookie2);

请注意,我还没有测试过这段代码,如果您没有其他选择,请尝试一下。

关于asp.net-mvc-3 - ASP.NET MVC3 - 反 CSRF 和 session 超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12706415/

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