[英]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.