表单身份验证保护什么,而不是使用会话变量

Par*_*osh 6 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>
Run Code Online (Sandbox Code Playgroud)

在登录页面中,我尝试手动创建cookie:

                    FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(1,
                    txtEmail.Text,
                    DateTime.Now,
                    DateTime.Now.AddMinutes(30),
                    false,
                    txtEmail.Text,
                    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));
Run Code Online (Sandbox Code Playgroud)

我也尝试过:

FormsAuthentication.RedirectFromLoginPage(txtEmail.Text, false);
Run Code Online (Sandbox Code Playgroud)

预告片得到相同的结果,请求Fiddler的主体显示所有提交的字段及其内容.

Osk*_*erg 2

您不应在没有 SSL 的情况下处理用户凭据或其他敏感数据。

无论您是否使用 SSL,发布的数据始终从客户端可见,并且始终可以“伪造”。SSL(如果使用得当)可以防止“中间人”监听通信,但重要的是要认识到,如果不严格实施,它几乎没有任何用处,因此您还应该考虑使用严格传输安全,即使并非所有浏览器都支持。

会话 ID 未“加密”,但会话 ID(实际上)无法“猜测”。HTTP(S) 是无状态的,您无法确定来自某个客户端的请求本身是否是恶意的。任何请求都将携带来自客户端的所有 cookie,无论是否加密(当然,如果 cookie 中的数据是加密的,则很难伪造其内容)。

可以而且应该做的是尝试保护 cookie 免于逃避其正确的上下文,从而遭受 XSS 和 CSRF 攻击。默认情况下,FormsAuthentication 仅将 HTTP 用于其 cookie。为了确保您网站上的所有 cookie 均为 HTTP,请将以下内容放入您的 web.config 中:

<httpCookies httpOnlyCookies="true" />
Run Code Online (Sandbox Code Playgroud)

为了确保所有 cookie 都绑定到安全连接,请使用:

<httpCookies requireSSL="true" />
Run Code Online (Sandbox Code Playgroud)

现在,您应该在自己的身份验证之前使用表单身份验证的主要原因是它是一个经过验证的解决方案。损坏的身份验证和会话管理在OWASP 前 10 名中排名第二,只是因为它比您想象的更难解决。

表单身份验证还具有非常可配置的优点,并且可以正确加密存储中的用户凭据(如果您告诉它这样做)。考虑到现代基于 GPU 的强力可能性,标准实现绝不是防弹的,但至少它没有做错。

如果您想更多地了解标准实现如何开展其业务,您可以使用任何免费提供的反编译器。