Asp.net core 如何禁用从url直接访问视图?
我的asp net核心应用程序中有两个视图。第一个视图称为customer,第二个视图称为payment。我想禁用用户可以通过在浏览器中键入url“”获得直接访问权限的功能 如果用户试图直接访问名为“付款”的视图,我希望将用户重定向到名为“客户”的视图Asp.net core 如何禁用从url直接访问视图?,asp.net-core,Asp.net Core,我的asp net核心应用程序中有两个视图。第一个视图称为customer,第二个视图称为payment。我想禁用用户可以通过在浏览器中键入url“”获得直接访问权限的功能 如果用户试图直接访问名为“付款”的视图,我希望将用户重定向到名为“客户”的视图 我该怎么做呢。我不知道。您可以创建一个过滤器,如下所示: public class NoDirectAccessAttribute:ActionFilterAttribute { public override void OnActio
我该怎么做呢。我不知道。您可以创建一个过滤器,如下所示:
public class NoDirectAccessAttribute:ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext context)
{
var canAccess = false;
//check the refer
var referer = context.HttpContext.Request.Headers["Referer"].ToString();
if(!string.IsNullOrEmpty(referer))
{
var request = context.HttpContext.Request;
var rUri = new System.UriBuilder(referer).Uri;
if(request.Host.Host==rUri.Host && request.Host.Port==rUri.Port && request.Scheme==rUri.Scheme)
{
canAccess = true;
}
}
// ... check other requirements
if (!canAccess)
{
context.Result = new RedirectToRouteResult(new RouteValueDictionary(new { controller = "Home", action = "Index", area = "" }));
}
}
}
然后可以将NoDirectAccess
属性应用于特定操作
[NoDirectAccess]
public IActionResult Privacy()
{
return View();
}
这不是它的工作原理。从POST返回重定向时,重定向由浏览器执行,而不是由服务器执行。服务器告诉浏览器URL,浏览器就到了。因为URL必须以一种可以告知浏览器的形式存在,用户可以直接在那里导航,如果他们愿意的话。也就是说,你可能想要。@GSerg,我不明白你所说的与这个问题有什么关系@mehpir,我能想到的最简单的解决方案是用
[HttpPost]
装饰动作,这将阻止任何GET访问页面,这就是我认为您所说的直接访问。我还假设您正在发布到付款页面。或者,您可以在付款操作中执行重定向到操作(“客户”)
。这可能需要检查传递给操作的任何状态是否有效,如果无效则重定向。@Gup3rSuR4cRedirectToAction
指示浏览器转到页面并给出URL。恶意用户可以随时拦截标题并手动导航到页面,而无需先访问以前的页面。不管它是get还是post,因为它同样容易伪造。据我所知,OP正在询问如何防止这种情况发生,因此除非从客户页面调用,否则无法访问支付URL。OP在他的问题中非常清楚。他希望防止用户直接键入支付页面的URL,这是一个GET请求。用HttpPost进行装饰可以阻止这种情况。防范恶意黑客用户(如您所指的用户)是断章取义的。虽然这是一个合理的担忧,但不是OP所要求的。除此之外的防护可能意味着任何事情,例如支付中的数据验证、用户身份验证、来自客户页面的加密令牌以及数据保护API等等……因此,解决这一问题所需的全部工作就是提供正确的引用程序。