2013-08-28 42 views
0

我在ASP.NET网站上实现了我自己的用户登录证书系统。我正在寻求建议,可以这样做吗?可以这样做来管理用户登录凭证吗?

我有类调用用户

public class User 
{ 
    public string Username = ""; 
    public string FullName = ""; 
} 

当用户登录时,我只是比较的用户名和密码(散列)与数据库中,如果比赛,我创建了一个对象类用户的和将其存储在SessionState

void ButtonLoginClick(object sender, EventArgs e) 
{ 
    string username = textBox_username.Text; 
    string pwd = textBox_pwd.Text; 

    if (!UserExists(username)) 
     return; 

    if (!PasswordIsCorrect(username, pwd)) 
     return; 

    User user = new User(); 
    user.Username = username; 
    user.FullName = GetFullName(username); 

    Session["user"] = user; 

    Responds.Redirect("~/Default.aspx"); 
} 

每当ASP.NET页面加载,我会检查SessionState的为用户类对象,如果不存在,系统将重定向页面登录页面。

protected void Page_Load(object sender, EventArgs e) 
{ 
    if (Session["user"] == null) 
    { 
     Responds.Redirect("~/Login.aspx"); 
    } 
    else 
    { 
     label1.Text = "Welcome, " + ((User)Session["user"]).FullName; 
    } 
} 

对于像这样管理登录有什么意见?这个可以吗?

感谢您的建议。

+0

我敢肯定,这是容易受到会话劫持。虽然对这个主题不够了解。我期待别人说什么。 – cgatian

+0

另外你也想确保你使用的是https,以便通过电话不可见密码 – cgatian

+0

@cgatian看起来像https是一个安全目的必须的。 – mjb

回答

1

我会在前面结束对长期评论,是的,这看起来像正确点击简单点。

你正在进入安全领域,那里没有一个真正的答案。问题是你愿意做什么交易?

例如,如果您正在运行整个网站100%HTTPS,则整套漏洞攻击是不可能的。但是,这需要一定的性能妥协。

您正在建立企业项目,小型网站,大型网站还是私人宠物项目?你的项目看起来很好,但是在使用代理时可能会遇到严重问题(特别是代理通常会为你缓存页面,导致其他用户看到原始用户数据,除非你非常小心)。

所以你缺少的两点是HTTPS无处不在(否则你需要研究会话劫持和其他这样的hijinks)和缓存预防(否则你可能会分享你的登录意外)。但这些对于一个宠物项目来说并不是什么大问题。

+0

感谢您的信息。它为我提供了进一步研究的方向。 – mjb

1

登录页面:

void ButtonLoginClick(object sender, EventArgs e) 
{ 
    string username = textBox_username.Text; 
    string pwd = textBox_pwd.Text; 

    if (!UserExists(username)) 
     return; 

    if (!PasswordIsCorrect(username, pwd)) 
     return; 

    User user = new User(); 
    user.Username = username; 
    user.FullName = GetFullName(username); 

    Session["user"] = user; 
    if(Session["RequestPage"]==null) 
    { 
     Responds.Redirect("~/Default.aspx"); 
    } 
    else 
    { 
     Responds.Redirect(Session["RequestPage"].ToString()); 
    } 
} 

其他网页的Page_Load:

protected void Page_Load(object sender, EventArgs e) 
{ 
    if (Session["user"] == null) 
    { 
     Session["RequestPage"] = Request.Url.ToString(); 
     Responds.Redirect("~/Login.aspx"); 
    } 
    else 
    { 
     label1.Text = "Welcome, " + ((User)Session["user"]).FullName; 
    } 
} 
+0

这很酷。谢谢 :) – mjb