asp.net – 表单身份验证保护什么,而不是使用会话变量
我正在开发一个应用程序,它使用Session变量来跟踪用户,检查母版页是否存在,否则将它们敲出来登录.我想将其更改为表单身份验证,因为我认为它更安全,数据已加密.
有人能告诉我实际加密了哪些数据?我尝试在我的网站上设置表单身份验证,它工作正常,用户正在被正确跟踪,无法登录而无法访问页面.但是,当我查看请求正文,使用Fiddler时,我看到所有表单字段和那里内容.黑客是否可以使用它来更改数据并重新提交请求,就像使用从Session变量生成的cookie一样?这个应用程序没有使用SSL,所以我理解SSL会加密正文,但我认为这也是表单身份验证的功能.否则它加密什么,只是cookie中的会话ID? 这是我使用的代码: <authentication mode="Forms"> <forms loginUrl="default.aspx" name=".ASPXFORMSAUTH_Test" defaultUrl="home.aspx" protection="All"/> </authentication> <authorization> <deny users="?"/> </authorization> 在登录页面中,我尝试手动创建cookie: FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(1,txtEmail.Text,DateTime.Now,DateTime.Now.AddMinutes(30),false,FormsAuthentication.FormsCookiePath); // Encrypt the ticket. string encTicket = FormsAuthentication.Encrypt(ticket); // Create the cookie. Response.Cookies.Add(new HttpCookie(FormsAuthentication.FormsCookieName,encTicket)); // Redirect back to original URL. Response.Redirect(FormsAuthentication.GetRedirectUrl(txtEmail.Text,false)); 我也尝试过: FormsAuthentication.RedirectFromLoginPage(txtEmail.Text,false); 预告片得到相同的结果,请求Fiddler的主体显示所有提交的字段及其内容. 解决方法
没有SSL,您不应处理用户凭据或其他敏感数据.
无论您是否使用SSL,发布的数据始终可以从客户端看到,并且始终可以“伪造”. SSL(如果使用得当)可以防止“中间人”收听通信,但重要的是要意识到如果没有严格执行它几乎没有用,因此你也应该考虑使用Strict Transport Security,即使它并非所有浏览器都支持. 会话ID不是“加密的”,但会话ID(实际上)不能“猜到”. HTTP(S)是无状态的,并且您无法确定某个客户端本身的请求是否是恶意的.任何请求都将携带来自客户端的所有cookie,加密与否(当然,如果cookie中的数据被加密,则很难伪造它的内容). 可以而且应该做的是尝试保护cookie免于逃避其正确的背景,受到例如XSS和CSRF攻击. FormsAuthentication仅将HTTP用于其cookie作为默认值.要确保Web上的所有cookie都是HTTP,请将以下内容放在web.config中: <httpCookies httpOnlyCookies="true" /> 要确保所有cookie都绑定到安全连接,请使用: <httpCookies requireSSL="true" /> 现在,您应该使用表单身份验证的主要原因是它是一个经过验证的解决方案.破坏的身份验证和会话管理在OWASP Top 10上不是2,只是因为它比你想象的要难. 表单身份验证还增加了可配置性的好处,并正确加密存储中的用户凭据(如果您告诉它这样做).鉴于现代基于GPU的强力可能性,标准实现绝不是防弹,但至少它没有做错. 如果您想更多地了解标准实现如何处理其业务,您可以使用任何免费提供的反编译器. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |