Метод безопасного входа в ASP.NET MVC - PullRequest
0 голосов
/ 30 сентября 2019

В настоящее время я работаю над системой входа в систему моего WebApp, которую я разрабатываю в ASP.NET MVC. В настоящее время я использую .NET Framework 4.8.x. Теперь я разработал пользовательский интерфейс, и мой сервер работает. Это позволяет пользователю входить и выходить без проблем. Но теперь мой вопрос: безопасен ли мой способ работы?

Вот так выглядит моя функция входа в систему:

Примечание: В настоящее время я сохраняю пароль в целях тестирования, но позже я изменю его какхэш один с добавлением соли.

            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);

Вот так выглядит моя функция выхода из системы:

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

Есть ли здесь ошибки? Для меня не очень безопасно, если сервер проверяет только имя пользователя. Не было бы безопаснее, если бы я использовал SessionID, и срок его действия истек, например, через 24 часа? К сожалению, я не знаю, как это сделать. Я знаю, как работает автоматический выход из системы через тайм-аут сеанса. Но я думаю, что SessionIDManager очень мне поможет. Тем не менее, я не использую сущностную инфраструктуру и поэтому не могу дать классу 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);
        }
    }

У кого-нибудь есть предложения по улучшению для меня?

Безопасно ли использовать переменную сеанса для авторизации?

1 Ответ

0 голосов
/ 30 сентября 2019

Вы можете использовать логин с моделью (безопасный метод);

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
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...