我在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; }
}
答案 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)
...
}
此外,请确保未将在视图和操作上公开的模型的其他“只读”或未使用的属性用作查找或保存。视图模型可以帮助您定义域模型属性的子集,从而为您提供帮助。