簡體   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