2013-08-22 26 views
1

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

我见过的帖子提示使用会话或温度变量,但这不是我的情况下的选项。

这是代码的样子:

[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) 
{ 
. 
. 
. 
} 

提琴手显示以下内容:

/TargetAction ID = 01010101 &日期= 08%2F14%2F2013%2000%3A00%3A00 &什么? = 08%2F21%2F2013%2000%3A00%3A00 & param1 = somevalue & param2 = somevalue2

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

+0

与用户看到这些信息的关注?或者有人拦截请求? – Rob

+0

两者。我行业的法规禁止任何人看到这类数据。 – user2708543

+0

那么为什么是视图模型的一部分?它是某种认证令牌还是某种东西? – Rob

回答

1

你将需要让SSL在你的服务器上运行。

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

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

如果您只想隐藏数据(并将其放在大多数Web用户的级别之外),则可以始终对数据进行base64编码,而不是对其进行加密。 只要清楚你不是在加密数据,它仍然可以对它进行解码。这种方法不是加密的一种形式。

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

干杯。

0

你有这样做的两个选项:在服务器上

  1. Store中的数据,并给用户一个令牌(例如GUID)传递下去,以检索数据。由于使用Session或TempData不是选项,因此可以将视图模型存储在数据库中,然后使用URL中的令牌重定向用户以在下一个请求中检索它。

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

 
    [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); 
    } 
+0

选项#2效果很好,但我正在寻找一种“更清洁”的解决方案。我不知道是否存在,但不问问。但我需要提一点,我可以使用内部的会话管理器类。例如, – user2708543

+0

是否可以标记我想要在模型中编码的数据,以便我不必追踪它并确保它不以明文形式显示? – user2708543

+0

这就是我想要完成的事情。 Model.cs: public class someClass { [EncryptMe] public string userID {get;设置;} } 是否有可能创建一个模型,如上所示,其中的EncryptMe属性以某种方式在定位表单之前屏蔽数据? – user2708543