2

我正在创建一个我希望用户注册的个人网站。我一直在查找需要采取的各种安全措施,并且很好奇我需要注意哪些主要事项。我决定不使用 ASP.NET Forms 身份验证,主要是为了自己创建身份验证过程的乐趣。这是我到目前为止所做的:

  • 我有一个 MySQL 数据库,我在其中存储用户的登录信息,例如他们的密码和盐的哈希值
  • 登录后,设置一个等于他们用户名的会话——这让我想到了一个问题:这是在不使用表单身份验证的情况下跟踪登录用户的最佳方式吗?例如,设置会话是这样的:

    Session["User"] = username;

有没有更好的方法来跟踪登录用户?或者这是一种可以接受但仍然安全的处理方式?

4

2 回答 2

1

有没有更好的方法来跟踪登录用户?

Microsoft 将表单身份验证设计为使用加密的 cookie,以及使用查询字符串的无 cookie 回退。所以他们显然认为这是比使用Session.

一个优点是,如果用户的 Session 丢失(超时,但如果在使用 InProc Session 时回收应用程序 - 这是默认设置),用户不会自动注销。

如果您真的想“自己动手”,我建议您考虑:

  1. 编写一个自定义 MembershipProvider,它将与 FormsAuthentication 基础设施一起使用,但使您能够了解有关实现细节的一些信息。

  2. 或者研究 FormsAuthentication 设计,并尝试复制其中的大部分(例如:您可能会忽略对无 cookie 身份验证的支持)。

于 2012-07-13T15:43:55.837 回答
1

在我看来,更好的方法是将用户信息保存在加密的 cookie 中,这样您的服务器就不需要跟踪会话中的每个用户。而且它比会话更可靠。您可以做的是仅使用从 FormsAuthentication 创建安全身份验证 cookie 的机制,并使用您自己的授权。

public void OnLoginClick(object sender, EventArgs e)
{
   if(MySqlValidUser(username, pass)) // this is where you would check if user is valid
   {
      FormsAuthentication.SetAuthCookie(username, null);
      Response.Redirect("/");
   }
}

这样,如果您启用了表单身份验证,您可以轻松访问您的 asp.net 页面上的 User.Identity.Name 或 User.IsAuthenticated

<authentication mode="Forms" />
于 2012-07-13T15:20:40.017 回答