如何忽略MVC中查询字符串的模型绑定

时间:2010-11-16 15:28:58

标签: c# .net model-view-controller asp.net-mvc-2 model-binding

我有一个表单提交回复。控制器操作接受值作为参数。例如:EditProduct(int productid,string productname)。

productid是从隐藏字段中的表单提供的。我该如何确保该用户 不会调用此操作并将此productid和name作为queystring传递,模型绑定将绑定vales并将产品保存在数据库中?

4 个答案:

答案 0 :(得分:3)

我发现最安全的方法是检查用户是否有权编辑产品。在操作中执行任何数据库更新之前,请检查此项,您无需担心修改隐藏值的用户。

如果您想强制用户转到您的网页来执行帖子,您可以使用Html.AntiForgeryToekn()。但是,用户仍然可以访问该网站,查看防伪令牌并将其传递给他们。

答案 1 :(得分:1)

您可以在服务器上使用密钥对产品ID进行签名(使用HMACSHA512),然后在回发中验证签名。

您可能希望在签名时包含当前日期和/或用户或会话ID,以防止重播攻击。

答案 2 :(得分:1)

您应该在EditProducts操作中实施适当的访问控制,以便尝试编辑其他产品时会产生错误。

试图阻止用户修改查询字符串无效

答案 3 :(得分:0)

我建议你在你的模型中添加一个rowversion(timestamp)列。与签名或散列相比,这更容易(如果你可以对模型进行更改)。