繁体   English   中英

在 ASP.NET Core MVC 中验证会话

[英]Validate sessions in ASP.NET Core MVC

我有一个使用 ASP.NET Core 5 MVC 开发的应用程序,用 C# 编写。 我正在使用 OTP 验证来启用对以下突出显示的页面的访问:

public const string SessionKeyName = "CurrentOTP";

public IActionResult GenerateOTP(OTPData mydata)
{
    .
    .
    HttpContext.Session.SetString(SessionKeyName, mydata.OTP);
    return RedirectToAction("EnterOTP", "Home");
}

[HttpPost]
public JsonResult VerifyOTP(string otp,OTPData mydata2)
{
        bool result = false;

        if (string.IsNullOrEmpty(HttpContext.Session.GetString(SessionKeyName)))
        {
            HttpContext.Session.SetString(SessionKeyName, mydata2.OTP);
        }

        var sessionOTP = HttpContext.Session.GetString(SessionKeyName);

        if (otp == sessionOTP)
        {
            result = true;
        }

        return Json(result);
}

然而,我的问题是,任何用户只需在地址栏中输入完整的 URL 即可访问任何网页。 我该如何防止这种情况?

您可能应该在端点上使用[authorize]属性,并通过使用 services.AddAuthentication 在您的 startup.cs 中配置services.AddAuthentication来向您的网站添加某种形式的身份验证。 我实际上建议使用azure OTP并完全放弃您的自定义设置,因为 IT 安全的第一条规则是永远不要自己制作

public const string SessionKeyName = "CurrentOTP";

public IActionResult GenerateOTP(OTPData mydata)
{
    .
    .
    HttpContext.Session.SetString(SessionKeyName, mydata.OTP);
    return RedirectToAction("EnterOTP", "Home");
}

以下方法的更改

[HttpPost]
public JsonResult VerifyOTP(string otp)
{
        bool result = false;

        if (!string.IsNullOrEmpty(HttpContext.Session.GetString(SessionKeyName)))
        {
            var sessionOTP = HttpContext.Session.GetString(SessionKeyName);
            
            if (otp == sessionOTP)
            {
                result = true;
            }
        }
        return Json(result);        
}

暂无
暂无

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

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