0

我使用我自己的自定义用户处理程序来验证用户的身份。

    protected void Login1_Authenticate1(object sender, AuthenticateEventArgs e)
            {
            SqlReader rdr=null;
            rdr=GetReader(Login1.UserName.ToString().ToLower().Trim(),Login1.Password);
            while (rdr.Read())
            {
                e.Authenticated = true;
                Session["Username"] = Login1.UserName.ToString();
                Session["Name"] = rdr[0].ToString() + " " + (rdr[1].ToString() == null ? "" : rdr[1]);
                id = rdr[2].ToString();
                }
            }

对于网站的所有其他部分,我检查 Session["Username"] 是否不为空。我的问题是使用上述身份验证方法并将用户名存储在会话中是一个坏主意吗?我听说会话可以被黑客入侵,但它们不是加密和散列的吗?如果它们没有被散列,我们如何散列它们?

4

3 回答 3

0

使用自定义用户处理程序没有任何问题。我希望您的GetReader函数不受 sql 注入和其他基于 Web 的攻击的影响。

如果您不确定,请考虑使用Microsoft Web Protection Library

循环似乎没有必要,while您不会只获得一条记录吗?你不需要循环。

您不需要检查 aSession["Username"]是否不为空来确定用户是否已登录。用户是否直接访问该页面,无需登录,他将被带到登录页面。

于 2012-06-23T06:33:25.053 回答
0

使用表单身份验证有几个原因:

  1. 表单身份验证由 Microsoft 开发多年。它测试了它的安全性。我的方法从未经过测试,因此您和我都无法确定它是否安全,但表单身份验证受到所有人的信任。
  2. 人们为会话提前到期而苦苦挣扎。
  3. 由于有许多同时访问您的网站的用户,使用会话会导致内存问题。
  4. 使用表单身份验证更简洁、更优雅。
  5. 为什么不使用许多开发人员使用的方法,如果明天有人加入您的团队并帮助您的项目,他可能会弄错您的逻辑并可能危及安全性。
于 2012-06-27T06:14:37.020 回答
0

你在这里拥有的是一个非常基本且可能不安全的东西。如果您的网站变大,会话也可能导致高内存使用,并且难以扩展到多个服务器。

我有第二个选择,而不是使用表单身份验证。

我怀疑您制作了自己的身份验证处理程序,因为表单身份验证确实很难设置和自定义。

好吧,我编写了自己的身份验证模块,称为 FSCAuth。它在binpress上可用。它是 BSD 许可的。它的设计简单、安全且不会妨碍您。它围绕着一个非常小UserStore的数据库接口。它可以使用几乎任何可以想象的数据库格式。设置完成后,对于授权,所有必须做的就是Authentication.RequiresLogin()强制页面的一部分需要身份验证。它处理重定向业务等,您只需为其提供登录页面和未经授权的页面。它开箱即用也是安全的,并且不使用数据库中的会话或临时表。它是“无国籍”的。

Also along with being (in my opinion) awesome out of the box, because it's BSD licensed, it can be a great starting point for your own authentication system

于 2012-07-03T20:32:35.423 回答