绑定模型中的ID属性是否构成了过度发布的威胁?

时间:2019-04-24 10:12:07

标签: asp.net-core-mvc

我在MVC领域还很陌生,无法解决可能出现的过度宣传威胁。我有一个包含ID属性的“事件”模型。例如,当用户想要编辑现有的“事件”时,我使用此属性来获取需要从“事件”集合中更新的“事件”。

我试图用[BindNever]或[Editable]属性装饰Id属性,导致Id属性为0,因为该属性在发布后不再绑定。当然,当我想使用此Id属性从集合中获取“事件”时,这会产生问题。

因此,我将财产保留为未装饰。但这是不自然的,因为该属性不应由用户编辑。使用ViewModel不能解决我的问题,因为仍然需要Id属性。

在我在线上找到的所有示例中,Id属性始终是绑定模型的一部分。这对可能的过度招募构成威胁吗?我不认为那样,例如,在使用Entity Framework时,Id属性不可编辑,因为它是自动递增的。用户仍然可以更改ID以更新另一个“事件”,但是对于我的应用程序,这不会产生任何问题,因为用户可以编辑他想要的任何“事件”

型号:

[(1, 2), (2, 3), (3, 1)] and [(2, 3), (1, 2), (3, 1)]

控制器:

public class Event
{
    public int Id { get; set; }
    public string Name { get; set; }
}

1 个答案:

答案 0 :(得分:0)

  

绑定模型中的ID属性是否构成了过度张贴的威胁?

是的,如果您使用此ID进行编辑,则需要编写检查以确保允许用户对数据进行编辑。

public IActionResult EditEvent(Event postedEvent)
{
    //Make sure the current user can edit the posted event
    if(!CanUserEditEvent(postedEvent.Id, User.GetUserId()) return Forbid();

    //User can edit this event so continue normally
    if(ModelState.IsValid)
        ...
}

此外,请确保未将在视图和操作上公开的模型的其他“只读”或未使用的属性用作查找或保存。视图模型可以帮助您定义域模型属性的子集,从而为您提供帮助。