我目前正在考虑我的一个网络应用程序,我希望提供一些有关提高安全性的建议。
我会注意到该应用程序位于ASP.net中,当前的实现阻止我使用集成身份验证。这也绝不是一个需要高安全性的应用程序,我只是喜欢我的基础。
过去我存储过id和令牌。 令牌是用户ID +用户的Salt(重用auth信息中的值)的哈希值 当用户访问该站点时,将针对该令牌检查ID并相应地进行authed。
我觉得这里有个大洞。 从理论上讲,如果有人掌握了盐值,他们需要做的就是猜测哈希算法并迭代可能的ID,直到他们进入。我不认为这会发生,但它似乎仍然是一个错误。
有关如何正确确认用户cookie未被更改的任何建议?
答案 0 :(得分:12)
大多数网站的做法是对使用进行身份验证,如果成功,他们会向浏览器发送cookie以存储并发送任何后续请求。如果攻击者能够获得令牌(在它过期之前),他们将能够模拟用户。
因此,cookie和身份验证过程应始终通过https会话执行。攻击者必须抓住cookie的唯一方法是在最终用户的计算机上拦截它,如果他们能够这样做,他们可能会安装一个击键记录器并获得用户的密码。
关于使用什么类型的令牌无关紧要,只要它的伪随机性足以让攻击者猜测计算成本高昂。我自己使用GUID。如果你需要cookie中的额外信息,除了一个sessionid,你可以附加一个GUID,然后可能哈希或加密它只是为了一个腰带和括号方法。
答案 1 :(得分:4)
最好的方法是将会话ID存储为cookie值。
每当用户登录时,您都会在数据库或其他具有随机会话ID的会话存储中创建记录。将ID放入cookie中。稍后查看cookie时,您可以从数据库中检索所有用户信息。
这种方法具有以下优点,
如果这对您不起作用,请尝试加密。哈希将是我的最后选择。哈希本身毫无用处。您必须以明确的方式将用户ID和其他信息存储在不同的cookie中。您最终公开了用户信息。
答案 2 :(得分:3)
两种方式:
这很好,因为它可以解密它;但可能有人认为你不需要解密它(取决于你在那里存储的其他东西)。
我可能(以前有)选择#1。
答案 3 :(得分:0)
为什么不将哈希存储在cookie或任何其他伪随机数中呢?然后检查数据库以获取用户ID。
其他事项: 仅使cookie为http,即无法使用javascript设置 如果是一个选项,请仅使用https数据传输