0

我正在开发一个应用程序,其中初级用户对普通数据项具有编辑权限,而对禁止的数据项没有编辑权限。编辑数据项的 URL 如下所示:

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

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

4

2 回答 2

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
    }
于 2013-05-09T11:37:24.777 回答
0

您不能阻止用户更改 URL。您可以做的是检查他们的权限并验证请求,以执行他们请求的任何操作。查看 Barry Dorrans 的这篇博客文章,讨论这种情况。

于 2013-05-09T04:27:55.557 回答