基于此处发表评论的问题:
storing user detail ... session vs cache !
总结:我提到了一种技术,我在其中填充模型并使用隐藏字段来保留并传回信息; Viewstate便宜。西蒙哈尔西说,信息应该加密或散列,以免被篡改。我认为哈希的复杂性增加只是YAGNI的一种形式。
我可以肯定地看到敏感信息,但这一般是一个很好的经验法则吗?我错过了什么?
答案 0 :(得分:3)
我实际上有一个属性来执行此操作(类似的东西),并在安全演示文稿中谈论这个确切的事情。是的 - 您应该散列值的副本...加密它取决于您。如果加密它你就没有模型绑定但是更容易受到攻击,尽管哈希检查有帮助。我会很快发布代码并更新这篇文章。谁会想到Viewstate帮助安全:)
但要回答你的问题 - 你可以加密它,但你需要一种方法至少在服务器端验证它,所以我散列一个值并散列发布的值,然后比较属性中的散列。加密可以提供帮助 - 但是您需要实现自己的模型绑定器或手动处理这些值
经验法则通常是针对可能被恶意覆盖以攻击您的数据的任何值 - 然后您需要对这些字段进行一些保护/验证。您可以将服务器端与您知道的对于它们的有效选项(一种白名单形式)进行比较,但是在加载数据和保存数据时会有相同形式的规则,有时会有点混乱,除非它就像将用户的get / update限制为单个userId一样简单。
我的意思是..如果您正在更新说出用户的记录。通常,对安全性最重要的是用户不会更改userId以更新不属于他们的记录。获取/保存的逻辑很容易“o.UserId == userId”
然而,在复杂的基于角色的安全性中,逻辑变得更加棘手,并且不像这样限制记录更新。在这些情况下,您可以真正利用加密/散列字段。我总是哈希用于更新的特定字段。当然 - 它们可以与之前的请求中的其他有效散列字段一起伪造,但潜在损害的范围明显更受限制。