在没有回发控制的情况下保留一些值的最安全的方法是什么

时间:2012-12-12 21:57:08

标签: asp.net-mvc asp.net-mvc-3 asp.net-mvc-2 asp.net-mvc-4

我有一个模特:

 public class Attribute
 {
    public int Id { get; set; }
    public string Key { get; set; }
    public string Value{ get; set; }
 }

假设我的视图会显示@model IEnumerable<MyCustomer.ViewModels.Attribute>,我想为我的密钥和值设置一个EditorFor,但我只想保留我的Id,而不是在回发后将其放入回发控件中。我该如何实现这一目标?我知道我可以将它隐藏起来,但隐藏的内容可以修改,我不确定这是最安全的事情。我正在向我的视图传递一个新的[]属性,并且需要预设ID

2 个答案:

答案 0 :(得分:2)

以下帖子通过为隐藏字段创建值的安全哈希来提供解决问题的方法。

该帖子还链接到一篇包含SecuredValueHtmlHelper源代码的文章,听起来就像你需要的那样。

Prevent change of hidden field

答案 1 :(得分:0)

  

我怎样才能实现这个目标?

HTML的工作方式没有奇迹。无论您在HTML表单中添加什么内容,都可以获得回发。无论你省略什么,你都松了。

所以你有几种可能性:

  • 将值存储在ASP.NET会话变量中,以便稍后检索。
  • 使用在回发时发送的Key和Value属性来查询数据存储区和Id(仅当Key / Value对是唯一且数据存储区中具有相应的Id属性时才会起作用。)
  • 将Id属性的值存储在您可以在回发时检索的加密Cookie中。您可以使用FormsAuthentication.Encrypt/Decrypt方法。