0

ユーザー認証に次のコードを使用しています

    Home Controller:
    ------------------
    [AllowAnonymous]
    [HttpPost]
    public JsonResult JsonLogin(SecurityDTO usr)
    {
        var cnt = _ipres.CheckLoginCount(usr);

        if (cnt == 1)
        {
            var logDet = _ipres.GetUser(usr);
            if (logDet != null)
            {
                var dto = new SecurityDTO
                {
                    Id = logDet.Id,
                    UserName = logDet.username,
                    Password = logDet.password,
                    Email = logDet.Emailid,
                    UTID = logDet.UTID,
                };
                Session[USER] = dto;
            }
            if (logDet != null)
            {
                switch (logDet.UTID)
                {
                    case 1:
                        Session["UType"] = "admin";
                        return Json(new { success = true, redirect = Url.Action("Index", "Admin", new { area = "Admin" }) });
                    case 2:
                        Session["UType"] = "user";
                        return Json(new { success = true, redirect = Url.Action("Index", "User", new { area = "User" }) });
                    case 3:
                        Session["UType"] = "client";
                        return Json(new { success = true, redirect = Url.Action("Index", "Client", new { area = "Client" }) });
                    default:
                        Session["UType"] = null;
                        break;
                }
            }
        }
        else
        {
            ModelState.AddModelError("", "Invalid Username or Password");
        }
        return Json(new { errors = GetErrorsFromModelState() });
    }

    Base Controller:
    ------------------
    public SecurityDTO UDTO { get; set; }

    protected override void OnActionExecuting(ActionExecutingContext act)
    {
        if (Session["UType"] != null)
        {
            UDTO = (SecurityDTO)Session[HomeController.USER];
            base.OnActionExecuting(act);
        }
        else
            act.Result = RedirectToAction("Index", "Home", new { area = "" });
    }

これは、認証に非常に適しています。ログインに成功したら、ユーザーのタイプに応じてユーザーをエリアにリダイレクトします。エリア内のすべてのコントローラーは、ベース コントローラーを実装します。最近、次の理由により、これが効果的ではないことがわかりました。ユーザーとしてログインすると、URL は ~/AppName/User/User/ViewName になります。しかし、URL を改ざんして ~/AppName/Admin/Admin/ViewName に変更すると、管理者ユーザーでなくてもそのページに移動します。まだユーザーとしてログインしていますが、すべての管理機能にアクセスできます。基本的に、URL のユーザー タイプを変更すると、そのユーザー タイプと見なされます。ただし、意図した動作は、このような URL 改ざんが発生したときに、ユーザーをログイン ページにリダイレクトすることです。ベースコントローラーでユーザータイプの変更を認識し、ユーザーをログインページにリダイレクトするようなことはできますか? これを行う正しい方法を示してください...

4

1 に答える 1