用户特定信息随处可访问。如何保护它?

时间:2013-11-17 09:08:38

标签: asp.net-mvc entity-framework ef-code-first

使用ASP.NET MVC 5和实体框架。如何保护我的应用程序,以便我无法访问其他用户数据?

要做CRUD的东西,我在FooController中有索引,创建,编辑,删除方法,所以我可以使用:

/Foo/ 

查看我的信息我点击一个并获取

/Foo/Details/5

当我在浏览器中输入3时,我会得到别人的信息。

/Foo/Details/3

如何确保无法随处访问?我使用Owin Identity并登录到应用程序。

1 个答案:

答案 0 :(得分:3)

您可以通过从AuthorizeAttribute类派生来编写自定义授权过滤器,在内部可以检查当前经过身份验证的用户是否可以访问所请求的资源。

例如:

public class MyAuthorizeAttribute: AuthorizeAttribute
{
    protected override bool AuthorizeCore(HttpContextBase httpContext)
    {
        bool authorized = base.AuthorizeCore(httpContext);
        if (!authorized)
        {
            return false;
        }

        string id = httpContext.Request["id"];
        string currentUser = httpContext.User.Identity.Name;

        return HasAccessToResource(id, currentUser);
    }

    private bool HasAccessToResource(string id, string currentUser)
    {
        // You know what to do here => check in your backend whether the 
        // current user is authorized to access the specified resource id
        throw new NotImplementedException();
    }
}

然后用这个自定义属性装饰你的控制器/动作:

[MyAuthorize]
public ActionResult Delete(string id)
{
    // if you get that far, the current user is owner of the requested resource
    ...    
}