我正在开发一个应用程序,其中初级用户对普通数据项具有编辑权限,而对禁止的数据项没有编辑权限。编辑数据项的 URL 如下所示:
http://localhost/App/Items/Edit?id=5
问题是,如果初级用户知道被禁项目的 ID,他可以轻松更改 URL 中的 ID 并编辑该项目。我该如何防止呢?
我正在开发一个应用程序,其中初级用户对普通数据项具有编辑权限,而对禁止的数据项没有编辑权限。编辑数据项的 URL 如下所示:
http://localhost/App/Items/Edit?id=5
问题是,如果初级用户知道被禁项目的 ID,他可以轻松更改 URL 中的 ID 并编辑该项目。我该如何防止呢?
找到了这样的解决方案:
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
}
您不能阻止用户更改 URL。您可以做的是检查他们的权限并验证请求,以执行他们请求的任何操作。查看 Barry Dorrans 的这篇博客文章,讨论这种情况。