ASP.NET MVC保护成员在URL中的敏感数据区(ASP.NET MVC protected m

2019-09-23 21:44发布

假设一个ASP.NET MVC应用程序有一个保护会员区。 产生的一些网址包含敏感数据,例如帐户/ 123,123是敏感数据如帐户号。 如果用户机器后得到了妥协,攻击者无法获取到帐户/ 123,因为这将受到保护,但我们已经获得了用户只要看一眼他们的浏览器历史记录帐号。 我可以看到避免这个问题的唯一办法就是不要在URL中,即使在保护区使用的敏感数据。

我在想scenerios其中的敏感数据是用于索引,详细信息的ID,编辑..一个解决办法是添加另一个字段表示敏感数据的表格,如果受到损害,但可以在URL中使用这就是意味着什么。

或者有另一种方式?

Answer 1:

我想说的URL不使用敏感数据,并保持存储在用户会话中的帐号(如果假设多个账号,只保留当前的)。

编辑


看到您的编辑后:

如果你真的想不通过页面的URL有任何想法的客户端安全的方法来此取这种情况下考虑。

  • 用户有多个帐户
  • 帐户列在页面上
  • 帐户“ID”被使用当前的会话ID加密
  • 用户点击链接,并把他带链接/帐号/ 10912ljlkj2308s

现在,您的帐户ID是不再可见,并且加密密钥是只对会话和ID良好。 诚然会话ID的不一定是唯一的,但是这将是在历史/缓存中的“观众”一个巨大的威慑力。



Answer 2:

不要使用HTTP GET的请求敏感数据。 使用HTTP POST来代替。 把[AcceptVerbs(HttpVerbs.Post)]在你的ActionResult是肯定的。

类似的说明,不要使用HTTP GET来获得,你会在AJAX请求中使用的数据,有一个微妙的JSON漏洞 。



Answer 3:

我有一个类似的问题...还在想着最好的解决办法......但已经实现了汤姆的解决方案。 A面的问题是URL必须是MVC的“友好”。 的HTMLEncode不起作用,因为它允许/的。 Base64编码适用于以下辅助方法:

public static string Base64ToUrlFriendlyBase64(string value)
{
    return value.Replace("/", "_").Replace("+", "-");
}

public static string UrlFriendlyBase64ToBase64(string value)
{
    return value.Replace("_", "/").Replace("-", "+");
}


文章来源: ASP.NET MVC protected members area with sensitive data in URLs