保护基于Cookie的身份验证

Kel*_*ron 14 security cookies

我目前正在考虑我的一个Web应用程序,我希望提供一些有关提高安全性的建议.

我会注意到该应用程序在ASP.net中,当前的实现阻止我使用集成身份验证.这也绝不是一个需要高安全性的应用程序,我只是喜欢我的基础.

在过去,我已经存储了id和令牌.令牌是用户ID的哈希值+用户的Salt(重用auth信息中的值)当用户访问站点时,将根据令牌检查ID并相应地进行刷新.

我觉得这里有个大洞.从理论上讲,如果有人掌握了盐值,他们需要做的就是猜测哈希算法并迭代可能的ID,直到他们进入.我不认为这会发生,但它似乎仍然是一个错误.

有关如何正确确认用户cookie未被更改的任何建议?

sip*_*wiz 13

大多数网站的做法是验证使用,如果成功,他们会向浏览器发送cookie以存储和发送任何后续请求.如果攻击者能够获得令牌(在它过期之前),他们将能够模拟用户.

因此,cookie和身份验证过程应始终通过https会话执行.攻击者必须抓住cookie的唯一方法是在终端用户的计算机上拦截它,如果他们能够这样做,他们可能会安装一个击键记录器并获得用户的密码.

至于使用什么类型的令牌并不重要,只要它的伪随机性足以让攻击者猜测计算成本高昂.我自己使用GUID.如果你需要cookie中的额外信息,除了一个sessionid,你可以附加一个GUID,然后可能哈希或加密它只是为了腰带和括号方法.

  • 使用 cookie 身份验证时,您需要小心跨站点脚本伪造 (CRSF)。浏览器代表用户发送凭据,也有可能欺骗浏览器将其发送给攻击者。但这可以使用随机数来防止/最小化。谷歌它以获取更多信息。 (2认同)

ZZ *_*der 7

最好的方法是将会话 ID 存储为 cookie 值。

每当用户登录时,您都会在数据库或其他会话存储中创建一条记录,并使用随机会话 ID。将 ID 放入 cookie。当您稍后看到 cookie 时,您可以从数据库中检索所有用户信息。

这种方法有以下优点,

  1. 这是非常安全的。会话 ID 只是一个随机数。您不必担心密钥或盐被泄露。
  2. cookie 可以很容易地从服务器上撤销。您所要做的就是删除会话记录,这会使 ID 变得无用。
  3. cookie 值可能非常短。

如果这对您不起作用,请尝试加密。哈希将是我最后的选择。哈希本身是无用的。您必须将用户 ID 和其他信息清楚地存储在不同的 cookie 中。你最终暴露了用户信息。