假设ASP.NET MVc应用程序有一个受保护的成员区域。生成的某些URL包含敏感数据,例如Accounts/ 123,123是敏感数据,如帐号。如果用户的机器后来被攻破,攻击者将无法访问Accounts/123,因为这将受到保护,但我们仅通过查看用户的浏览器历史记录就可以获得用户的账号。我能看到的避免这种情况的唯一方法是即使在受保护的区域也不要在URL中使用敏感数据。
我在想场景,其中敏感数据是用于索引、详细信息、编辑的ID。一种解决方案可能是向表中添加另一个表示敏感数据的字段,如果该字段遭到破坏,则没有任何意义,但可以在URL中使用。
还是有别的办法?
发布于 2009-08-15 16:32:27
我要说的是,不要在URL中使用敏感数据,并将帐号存储在用户会话中(如果假设有多个帐号,则只保留当前帐号)。
编辑
查看您的编辑后:
如果您真的想要一种安全的方法来实现这一点,而客户端又不知道通过页面的URL,那么可以考虑这个场景。
现在你的帐户ID不再可见,加密密钥只对该会话和该ID有效。授予的会话ID可能并不总是唯一的,但这将对历史/缓存中的“查看器”造成巨大的威慑。
发布于 2009-08-15 16:50:59
不要使用HTTP GET来请求敏感数据。请改用HTTP POST。将[AcceptVerbs(HttpVerbs.Post)]放在您的ActionResult上以确保安全。
同样,不要使用HTTP get来获取将在AJAX请求中使用的数据,因为有一个subtle JSON vulnerability。
发布于 2010-02-06 22:52:31
我也有过类似的issue...still想法,认为最好的solution...but实现了汤姆的解决方案。一个附带的问题是,对于mvc,url必须是“友好的”。HtmlEncode不能工作,因为它允许/的。Base64可以使用以下助手方法:
public static string Base64ToUrlFriendlyBase64(string value)
{
return value.Replace("/", "_").Replace("+", "-");
}
public static string UrlFriendlyBase64ToBase64(string value)
{
return value.Replace("_", "/").Replace("-", "+");
}https://stackoverflow.com/questions/1282243
复制相似问题