繁体   English   中英

ASP.NET MVC中的安全登录方法

[英]Secure login method in ASP.NET MVC

我目前正在开发我在 ASP.NET MVC 中开发的 WebApp 的登录系统。 我目前正在使用 .NET 框架 4.8.x。 现在我已经开发了 UI 并且我的后端正在运行。 这允许用户登录和退出没有任何问题。 但我现在的问题是我的工作方式是否安全?

这是我的登录 function 的样子:

注意:目前,我将密码保存为用于测试目的,但稍后我会将其更改为添加了盐的散列密码。

            String mycon = "my-connection-string";
            SqlConnection scon = new SqlConnection(mycon);
            String myquery = "select * from loginDetails where uName=@uName and paswrd=@paswrd";
            scon.Open();
            SqlCommand cmd = new SqlCommand(myquery, scon);
            cmd.Parameters.AddWithValue("@uName", lc.userName);
            cmd.Parameters.AddWithValue("@paswrd", lc.password);
            SqlDataReader sdr = cmd.ExecuteReader();
            if (sdr.Read())
            {
                Session["username"] = lc.userName.ToString();
                return RedirectToAction("Index", "Home");
            }
            else
            {
                ViewData["Message"]= "Invalid Username or Password";
            }
            scon.Close();
            return View(lc);

这是我的注销 function 的样子:

            if (Session["username"] != null)
            {
                Session.Clear();
                Session.RemoveAll();
                Session.Abandon();
            }
            return View();

我这里有什么错误吗? 如果服务器只检查用户名,对我来说似乎不太安全。 例如,如果我使用 SessionID 并且它在 24 小时后过期,会不会更安全? 不幸的是,我不知道该怎么做。 我知道自动注销是如何通过会话超时工作的。 但我认为SessionIDManager会对我有很大帮助。 但是,我不使用实体框架,因此我不能给 class SessionIDManager一个上下文实例。

要授权用户,我使用过滤器。 它看起来像这样:

 public class Authorize : System.Web.Mvc.ActionFilterAttribute, System.Web.Mvc.IActionFilter
    {
        public override void OnActionExecuting(System.Web.Mvc.ActionExecutingContext filterContext)
        {
            if (HttpContext.Current.Session["username"] == null)
            {
                filterContext.Result = new System.Web.Mvc.RedirectToRouteResult(new System.Web.Routing.RouteValueDictionary
                {
                    { "Controller", "Login"},
                    { "Action", "Index"},
                });
            }
            base.OnActionExecuting(filterContext);
        }
    }

有人对我有改进建议吗?

使用 session 变量进行授权是否安全?

您可以使用 model 登录(安全方法);

public ActionResult Login(string username, string password)
{
    // LoginDetails -> Your Model Name && db -> Your Database Context Name
    LoginDetails loginDetails = db.LoginDetails.Where(item => item.username == username && item.password == password).FirstOrDefault();
    if(loginDetails == null)
        // Login Failed
    else
        // Login Successful
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM