【问题标题】:Encrypted view state in asp.net mvcasp.net mvc中的加密视图状态
【发布时间】:2013-03-20 14:30:45
【问题描述】:

我知道视图状态在 mvc 中不存在。我正在寻找类似于 asp.net 网络表单中的加密视图状态模式的东西。我想在请求中隐藏一些数据。

我想要实现的是将一些数据传递给响应并对用户隐藏。我不知道用户能够修改数据或查看它。通过将这些数据隐藏在客户端,我想减少服务调用,因为我不能使用会话来保留这些数据。

数据根本不会显示。我只需要稍后将其传递给服务即可。

【问题讨论】:

  • “我不希望用户能够修改或查看数据”。有很多方法可以尝试这样做,但以一种或另一种方式,您的网络应用程序的某些部分将必须查看数据,这也(通常)意味着,如果事情必须发生在客户端,这种或另一种方式,如果用户知道如何使用调试器,他们也可以访问它。当然,这并不意味着您不能采取措施让获取数据变得痛苦/乏味。
  • 加密视图状态完全是另一回事。服务器只能保留任何解密密钥服务器端。由于您希望您的应用程序在客户端显示数据,因此您的应用程序必须在客户端解密,这需要为您的客户端应用程序提供解密密钥/方法。
  • 请再读一遍。我只想隐藏隐藏的字段。因此用户将无法更改或查看该数据。而且我可以在服务器端重用它而不必担心它被修改了。
  • 您希望如何隐藏这些“字段”?如果您想“完全隐藏”某些数据,请不要发送!但是您的原始帖子说您希望“传递一些数据以响应并将其对用户隐藏”。目前尚不清楚您希望这些数据“隐藏”到何种程度。例如,如果您只想要一个隐藏字段,请使用<input type="hidden" ...>。但是您说您不希望用户更改此数据。究竟如何?可以在标记中发送信息,只是不“可见”吗?您只需要某种防篡改措施吗?然后阅读数字签名。
  • 我最初的问题是是否有某种类似于加密视图状态的机制。我们可以在这里聊天chat.stackoverflow.com/rooms/26254/…吗?

标签: asp.net-mvc


【解决方案1】:

您只需要在将值放入隐藏输入字段之前对其进行加密,然后在发布时在服务器上对其进行解密。

查看如何在 C# 中进行简单的加密/解密。这里有一些很好的实现:

http://www.joshrharrison.com/archive/2009/01/28/c-encryption.aspx

https://stackoverflow.com/a/5518092/160823

【讨论】:

  • 是的并签名,这样我就知道用户是否修改了它。我试图找到类似由框架实现的加密视图状态。
【解决方案2】:

所以我找到了我的问题的答案。 MVC3Futures project 添加了所需的行为。

可以将整个模型序列化并加密。

@Html.Serialize("Transfer", Model, SerializationMode.EncryptedAndSigned)

通过放置反序列化属性自动绑定控制器。

public ActionResult Transfer(string id,[Deserialize(SerializationMode.EncryptedAndSigned)]Transfer transfer)

【讨论】:

    【解决方案3】:
    1. 虽然我真的不知道你在加密什么。但是如果你想避免 CSRF 或数据篡改,那就去吧。

    您可以使用AntiForgeryToken() 再次验证被篡改的数据。防伪令牌可用于帮助保护您的应用程序免受跨站点请求伪造。要使用此功能,请从表单调用 AntiForgeryToken 方法并将 ValidateAntiForgeryTokenAttribute 属性添加到您要保护的操作方法中。

    在视图中像这样使用AntiForgeryToken

    @Html.AntiForgeryToken()
    

    在控制器中

    [ValidateAntiForgeryToken]
    Public ActionResult SomeAction()
    {
      return view()
    }
    

    【讨论】:

    • 我知道这种方法,但它对我的问题没有帮助。我想要实现的是将一些数据传递给响应并将其对用户隐藏。我不知道用户能够修改数据或查看它
    • @jansalawa 规则 #1 从不信任用户输入。并且不要在客户端存储此类信息。他可能有更好的工具来篡改数据
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-06
    • 2012-04-19
    • 1970-01-01
    • 1970-01-01
    • 2011-02-10
    相关资源
    最近更新 更多