使用绑定属性的目的是防止攻击者在发布请求时分配属性值或控制要绑定的属性。
让我们假设,您有一个名为的类Member
和一个保存成员的创建方法。但是您不希望用户发送MemberType
属性值。
Class Member
{
public int MemberId { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public string MemberType { get; set; }
}
[HttpPost]
Public ActionResult Create(Member member)
{
Save(member);
}
假设现在,您只提供作为默认值的常规成员类型。您可能认为您可以通过不允许输入MemberType
Property 来阻止用户发送 MemberType 属性的值。但是当用户发布成员对象时,攻击者可能会拦截请求并在请求中发送 MemberType 值,
MemberId=1&FirstName=Chandra&LastName=Malla&MemberType=Premium
并将成员保存为高级成员。为了防止这种情况,您可以使用属性 装饰Member
类。Bind
[Bind(Include="MemberId,FirstName,LastName")]
Class Member
{
...
或者
[Bind(Exclude="MemberType")]
Class Member
{
...
现在如果Member
发布对象,则不会发布 MemberType 属性值。
如果您使用的是 ViewModel,则可能不必使用绑定属性,因为您可以在 ViewModel 中省略 MemberType 属性。
Class Member
{
public int MemberId { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public string MemberType { get; set; }
}
Class MemberViewModel
{
public int MemberId { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
}
[HttpPost]
Public ActionResult Create(MemberViewModel memberviewmodel)
{
Save(memberviewmodel);
}
如果你没有很好地设计你的模型和/或 ViewModel 并且不使用绑定属性来避免发布你不想要的属性,那可能会产生不利影响。