在Asp.net mvc 3应用程序中保护Urls

时间:2013-05-09 04:21:23

标签: c# asp.net-mvc-3 security

我正在开发一个应用程序,其中A Junior用户对普通数据项具有Edit访问权限,并且对禁止的数据项没有编辑权限。编辑数据项的URL如下所示:

http://localhost/App/Items/Edit?id=5

问题是,如果初级用户知道被禁项目的ID,他可以轻松更改URL中的ID并编辑该项目。 我该如何预防?

2 个答案:

答案 0 :(得分:0)

您无法阻止用户更改网址。您可以做的是检查他们的权限,并验证请求,以执行他们要求的任何操作。请查看Barry Dorrans的blog entry讨论此类情景。

答案 1 :(得分:0)

找到这样的解决方案:

public class ItemAuthorizeAttribute : AuthorizeAttribute{

    protected override bool AuthorizeCore(System.Web.HttpContextBase httpContext){
        var userRepository = Container.Get<IRepository<User>>();
        var userName = httpContext.User.Identity.Name.GetOnlyUserName();
        var user = userRepository.GetBy(u => u.Name == userName && u.IsEnabled).FirstOrDefault();
        if (user == null) return false;
        user.Identity = httpContext.User.Identity;
        httpContext.User = user;
        ItemId = httpContext.Request["id"].ToInt();
        var itemRepository = Container.Get<IItemRepository>();
        var item = itemRepository .Get(ItemId );
        var currentUser = Container.Get<CurrentUser>();
        currentUser.user = user;
        var isUserPermitted = base.AuthorizeCore(httpContext);
        if (isUserPermitted)
        {
            return true;
        }
        if (item!= null)
        {
            if (!item.IsBanned)
            {
                return true;
            }
        }
        return false;
    } 
}


 protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext)
    {
       // Unauthorize request URL
    }