【问题标题】:Securing controllers in ASP.NET MVC to the correct user将 ASP.NET MVC 中的控制器保护给正确的用户
【发布时间】:2010-10-31 01:11:33
【问题描述】:

我正在 ASP.Net MVC 中构建一个应用程序来记录任务。

用户只能删除自己的任务。是否有一种标准方法可以防止不同的登录用户简单地输入删除控制器 url,使用属于另一个用户的任务的 [id] 参数,从而删除另一个用户的任务?

例子:

用户 A 有一个 id 为 13 的任务。当用户 A 查看任务时,有一个指向 /tasks/delete/13 的链接,用于删除任务记录。用户 B 可以查看任务 13,然后决定在地址栏中输入 /tasks/delete/13,从而删除用户 A 的任务。

您是否必须在控制器中编写自己的代码来防止这种情况发生,或者是否有通常处理这种情况的标准方法?

非常感谢!

【问题讨论】:

    标签: asp.net asp.net-mvc security


    【解决方案1】:

    当谈到 ASP.NET MVC 中的安全性时,您需要进行身份验证和授权。

    身份验证是验证用户身份的过程,通常涉及根据数据库检查用户名和密码,然后为该用户分配某种用户 ID。

    授权是限制对系统资源的访问的过程,通常通过角色 (RBAC)) 完成。但是,角色通常不会涵盖您所追求的所有权。

    在您的情况下,您需要编写自己的代码来对任务执行所有权检查,例如:

    if (!task.IsOwnedBy(userID))
    {
      throw new HttpException ((int)HttpStatusCode.Unauthorized, 
                               "You are not authorized.");
    }
    

    我在这里How do you weave Authentication, Roles and Security into your DDD? 提出了类似的问题,但尚未决定如何将其集成到我的业务层中。

    【讨论】:

      【解决方案2】:

      NerdDinner 应用程序在其 Dinners 控制器中就有这样一个示例。

      http://nerddinner.codeplex.com/

      有关如何执行此操作的说明如下:
      http://nerddinnerbook.s3.amazonaws.com/Part9.htm

      在页面的一半处看到标题:在创建晚餐时使用 User.Identity.Name 属性在编辑晚餐时使用 User.Identity.Name 属性。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-08-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-14
        • 1970-01-01
        相关资源
        最近更新 更多