2012-12-02 30 views
1

我使用MVC为我的数据输入窗体,我有以下的div:用户是否可以将输入从只读变为可编辑?

<div> 
     <label>Bar Code:</label> 
     @if (Model.GiftCardId == default(int)) 
     { 
     @Html.TextBoxFor(model => model.BarCode) 
     } 
     else 
     { 
     @Html.TextBoxFor(model => model.BarCode, new { @readonly="readonly"}) 
     } 
</div> 

在这里,我要确保,如果用户正在进入一个新的礼品卡,可编辑输入显示允许用户输入新的条形码。但是,如果用户正在编辑现有礼品卡,则输入必须显示为只读输入。我的问题是:用户是否可以改变barCode输入的只读属性并允许自己输入另一个属性? BarCode字段不是表中的主键,但它必须是唯一的。我使用GiftCardId字段来识别记录。但是,在提交表单时,如何阻止用户更改GiftCardId?这如何被控制?

+2

请停止引用“ASP.NET MVC”简称为“MVC”。一个是框架,而另一个是独立于语言的设计模式。这就像调用IE - “互联网” –

+0

你有没有想过考虑javascript –

回答

1

我明白这是一个安全相关的问题:即。用户是否可以破解该表单来处理您不想要的内容。

答案是肯定的,用户可以使用像Firebug这样的工具干扰标记,从而改变只读属性。

您不显示如何从用户收集GiftCardId。假设它是在先前的视图/操作方法中收集和验证的,则更安全的方法是根据GiftCardId是否有效/新来重定向到不同的视图。

评论

一对夫妇的建议之后,编辑。

  • 将GiftCardId存储在会话状态中,而不是将其发送到浏览器。
  • 使用单向哈希函数从GiftCardId生成一个令牌并将其发送到隐藏字段中的浏览器。重新发送已回发的GiftCardId并检查它是否与原始散列匹配。有关创建MD5哈希的信息,请参见short article
+0

GiftCardId是由数据库生成并发送到视图。但是,如果表单在给定的GiftCardId上发布更新并且用户更改了GiftCardId,则会更新错误的记录。那么如何保证GiftCardId不会被客户端用户更改? – Ray

0

简单的答案是“是”,所有的请求都可以伪造,这就是为什么您永远不应该信任用户输入并验证服务器端用户输入的原因。

你可以做什么取决于你需要什么以及GiftCardId的含义已被修改。你可以做的除了服务器端验证,

1. hide the field instead of making it visible 
2. encrypt the GiftCardId 
相关问题