加密View Model中传递的数据

时间:2013-08-22 18:47:39

标签: asp.net-mvc encryption

我在MVC控制器中有一个简单的post方法,用于检查ModelState是否有效,然后调用另一个方法将模型实例作为参数传递。该模型包含通过查看Fiddler轻松获得的敏感数据。我的目标是以某种方式屏蔽或加密这些数据,以便在http跟踪中看不到它。

我看到过建议使用Session或Temp变量的帖子,但在我的情况下这不是一个选项。

这就是代码的样子:

[HttpPost]
[ActionName("Search")]
[AccessControl(Xri)]
public ActionResult SearchPost(string string1, ViewModel model)
{
        model.NoResults = false;    

        if (ModelState.IsValid)
        {

           if (ModelState.IsValid) return RedirectToAction("TargetAction", model);            
         }

}

[AccessControl(Xri)]
public ActionResult TargetAction(string arg, ViewModel viewModel)
{
 .
 .
 .
}

Fiddler展示了以下内容:

/ TargetAction ID = 01010101&安培;日期= 08%2F14%2F2013%2000%3A00%3A00&安培;为了= 08%2F21%2F2013%2000%3A00%3A00&安培;参数1 = someValue中&安培; param2的= somevalue2

有没有办法屏蔽这里显示的网址参数?

2 个答案:

答案 0 :(得分:1)

您需要在服务器上运行SSL。

如果没有来自受信任机构的服务器证书,您几乎无法通过线路加密数据。为什么?因为您需要在开始发送数据之前以明文形式发送加密/解密详细信息,以便您的客户端(可能是JavaScript)可以对其进行解码。

使用证书并在443上运行,为您提供服务器/浏览器的内置功能,这在自定义实现中很难被击败。

如果您只想隐藏数据(并将其置于大多数Web用户的水平之外),您可以始终对数据进行base64编码,而不是对其进行加密。 请注意,您不是在加密数据,而且仍然可以对其进行解码。此方法不是加密形式。

如果你决定采用这种方法,这里有一些资源: Client-side Encoding/Decoding MSDN Reference on Encoding to Base64

干杯。

答案 1 :(得分:0)

您有两种选择:

  1. 将数据存储在服务器上,并为用户提供一个令牌(例如GUID)以传递以检索数据。由于使用Session或TempData不是一个选项,您可以将viewmodel存储在数据库中,然后使用URL中的令牌重定向用户,以便在下一个请求时检索它。

  2. 另一个选项是让用户像您当前一样在URL中传递viewmodel,但是以加密格式传递它。例如,你可以 将模型序列化为JSON,使用.NET的内置加密算法对其进行加密,然后重定向到下一个操作,将加密的字符串作为视图模型传递。然后,您可以将目标操作更改为:

  3.     [AccessControl(Xri)]
        public ActionResult TargetAction(string arg, string encryptedViewModel)
        {
          var decryptedString = Decrypt(encryptedViewModel) ; // supply the decrypt function to match your encryption
          var viewModel = JsonConvert.DeserializeObject(decryptedString); 
        }