首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ASP.NET WebForms OWASP上CSRF的两种解决方案

ASP.NET WebForms OWASP上CSRF的两种解决方案
EN

Security用户
提问于 2018-06-14 02:24:37
回答 1查看 9.4K关注 0票数 3

我对来自OWASP 从ASP.NET网站指南的这两种解决方案之间的差异感到困惑

解决方案一:

虽然viewstate并不总是适合web开发,但使用它可以提供CSRF缓解。要使ViewState免受CSRF攻击,需要设置ViewStateUserKey:受保护的覆盖OnInit(EventArgs e) { base.OnInit(e);ViewStateUserKey = Session.SessionID;}

解决方案二:

如果不使用Viewstate,则使用双提交cookie查看ASP.NET Web默认模板的默认母版,以获得手动反CSRF令牌。私有const字符串AntiXsrfTokenKey = "__AntiXsrfToken";私有const字符串AntiXsrfUserNameKey = "__AntiXsrfUserName";私有字符串_antiXsrfTokenValue;受保护的void Page_Init(对象发送方,EventArgs e) { //以下代码有助于防止XSRF攻击var requestCookie = Request.CookiesAntiXsrfTokenKey;Guid requestCookieGuidValue;if (requestCookie = null & Guid.TryParse(requestCookie.Value,out requestCookieGuidValue)) { //使用cookie _antiXsrfTokenValue =requestCookie.Value中的反XSRF令牌;Page.ViewStateUserKey = _antiXsrfTokenValue;}Guid.NewGuid{ //生成一个新的抗XSRF令牌并保存到cookie _antiXsrfTokenValue = Guid.NewGuid().ToString("N");Page.ViewStateUserKey = _antiXsrfTokenValue;var responseCookie =新HttpCookie(AntiXsrfTokenKey) { HttpOnly = true,Value = _antiXsrfTokenValue };if (FormsAuthentication.RequireSSL & Request.IsSecureConnection) { responseCookie.Secure = true;} Response.Cookies.Set(responseCookie);} Page.PreLoad += master_Page_PreLoad;}受保护的虚master_Page_PreLoad(对象发送方,EventArgs e) { if (!IsPostBack) { // Set Anti-XSRF令牌ViewStateAntiXsrfTokenKey = Page.ViewStateUserKey;ViewStateAntiXsrfUserNameKey = Context.User.Identity.Name?String.Empty;}°{ //验证反XSRF令牌if ((字符串)ViewStateAntiXsrfTokenKey != _antiXsrfTokenValue欧元(字符串)ViewStateAntiXsrfUserNameKey != (Context.User.Identity.Name?)( String.Empty)) {引发新InvalidOperationException(“验证反XSRF令牌失败”);}}

我没有得到关于第一种方法的评论:“为了使ViewState免受CSRF攻击,您需要设置ViewStateUserKey。”看看第二种解决方案的代码,它显然在代码中使用了ViewSate,我假设作者的意思是“使用ViewState来持久化控制状态”。因此,如果EnableViewState在页面或母版页中设置为false,那么第一种方法将根本不起作用?

更新:对OWASP抗CSRF令牌ASP.NET中第二种方法的更好评论

自Visual 2012以来,抗CSRF机制得到了改进.新策略仍然使用ViewState作为CSRF保护的主要实体,但也使用令牌(可以作为GUID生成),这样就可以将ViewStateUserKey设置为令牌而不是会话ID,然后根据cookie验证它。

EN

回答 1

Security用户

发布于 2018-06-18 00:39:57

至少对我来说,棘手的部分是构造一个成功的/工作的示例CSRF攻击,那么实现这两种方法并在工作中看到它们并实际地减轻CSRF攻击是非常简单的。

第一种方法,仅使用ViewStateUserKey,似乎没有受到关闭enableViewState的影响,无论是在页面级别还是在web应用程序级别。由于隐藏的ViewState仍然在呈现的HTML中,并且编码ViewState的过程仍然在进行,所以您不能简单地关闭ViewState就可以关闭ViewStateUserKey

另一方面,由于第二种方法是使用ViewState存储AntiXsrfTokenKey,如果禁用ViewState,它将停止工作。因此,来自OWASP页面的评论是错误的,或者至少是误导性的,来自OWASP其他页面的另一条评论更好、更清晰。

票数 1
EN
页面原文内容由Security提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://security.stackexchange.com/questions/187740

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档