2

我使用 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 如何防止这种情况?有没有办法传递参数来授权属性?如何防止用户访问其他用户信息?

4

2 回答 2

4

恐怕没有什么神奇的开关——【授权】只是踢掉未经授权的用户、不在指定范围内的用户或角色错误的用户。上下文绑定数据的安全性取决于您 - 如果传递的 id 对实际用户不可用,您必须在 Index() 正文中执行此操作并将用户重定向到其他地方。

于 2013-07-08T15:20:30.827 回答
1

有一个“AuthenticationFilter”ASP.NET MVC5 可用于此目的。

身份验证过滤器

身份验证筛选器是 ASP.NET MVC 中的一种新型筛选器,它在 ASP.NET MVC 管道中的授权筛选器之前运行,并允许您为每个操作、每个控制器或全局指定所有控制器的身份验证逻辑。身份验证过滤器处理请求中的凭据并提供相应的主体。身份验证过滤器还可以添加身份验证质询以响应未经授权的请求。

请参阅本教程以了解如何使用它。

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();
      }
    }
  }
}
于 2013-12-23T16:54:46.763 回答