在ASP.NET Core MVC中验证会话



我有一个使用C#编写的ASP.NET Core 5 MVC开发的应用程序。我正在使用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中的服务来为您的网站添加某种形式的身份验证。实际上,我建议使用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);        
}

最新更新