我使用Authorize属性检查用户是否被授权进入特殊视图。
[HttpGet]
[Authorize]
public ActionResult Index(int ID)
{
ViewBag.sID = ID;
return View();
}
假设这是mu URL:localhost:16621 / Panel / Index / 1 现在,此授权用户可以更改1到2并导航到另一个用户信息。像localhost:16621 / Panel / Index / 2 怎么防止这个?有没有办法将参数传递给authorize属性? 如何防止用户访问其他用户信息?
答案 0 :(得分:4)
我担心没有神奇的开关 - [授权]只是启动未经授权的用户,不在指定范围内的用户或用户角色错误。上下文绑定数据的安全性取决于您 - 如果传递的id不适用于实际用户,您必须在Index()体内执行此操作并将用户重定向到其他位置。
答案 1 :(得分:1)
有一个“AuthenticationFilter”ASP.NET MVC5可用于此目的。
身份验证过滤器是ASP.NET MVC中的一种新型过滤器 在ASP.NET MVC管道中的授权过滤器之前运行 允许您指定每个操作,每个控制器的身份验证逻辑, 或全局的所有控制器。验证过滤器过程 请求中的凭据并提供相应的主体。 身份验证筛选器还可以添加身份验证挑战 回应未经授权的请求。
请参阅this tutorial了解如何使用它。
using System.Web.Mvc;
using System.Web.Mvc.Filters;
namespace VSMMvc5AuthFilterDemo.CustomAttributes
{
public class BasicAuthAttribute : ActionFilterAttribute, IAuthenticationFilter
{
public void OnAuthentication(AuthenticationContext filterContext)
{
}
public void OnAuthenticationChallenge(AuthenticationChallengeContext filterContext)
{
var user = filterContext.HttpContext.User;
if (user == null || !user.Identity.IsAuthenticated)
{
filterContext.Result = new HttpUnauthorizedResult();
}
}
}
}