我正在开发一个应用程序,其中A Junior用户对普通数据项具有Edit访问权限,并且对禁止的数据项没有编辑权限。编辑数据项的URL如下所示:
http://localhost/App/Items/Edit?id=5
问题是,如果初级用户知道被禁项目的ID,他可以轻松更改URL中的ID并编辑该项目。 我该如何预防?
答案 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
}