0

问题:

所以我一直在玩 ASP.NET Forms Authentication,我所做的是我基本上创建了一个带有 Token 列的 User 表来存储 Forms Authentication Token。

设想:

  1. 用户输入他的用户名和密码。
  2. 如果找到用户,他将获得身份验证。
  3. 身份验证令牌存储在数据库中。
  4. 加密的身份验证令牌存储在 cookie 中并发送给客户端。
  5. 当用户请求需要保存在 cookie 中的身份验证令牌的方法时,将被解密并与存储在数据库中的令牌进行比较。

我的问题:

  1. 这种方法是否安全?优点?缺点?
  2. 我可以使用这种方法的会话,所以我必须对每个请求进行比较?

笔记:

  1. Cookie 到期日期设置为自创建后 60 天。
  2. 二手 ORM 是 Rob Conery 的 Massive。
4

1 回答 1

1

值得注意的是,微软在确保他们的系统尽可能安全方面投入了大量资金。这包括表单身份验证;他们不会推荐它,除非他们确定最终用户不需要执行任何其他操作,默认情况下它是安全的。

我记得最近关于 SO 的一个问题,用户决定通过使用 MD5 对结果进行散列并将其用作比较来使他们的 SHA-256 散列“更安全”。在这种情况下,通过添加“更多安全性”,他们实际上设法显着降低了系统的安全性。

因此,我个人会避免向表单身份验证添加任何复杂性,并放弃加密令牌的想法。有足够的在线和离线资源来保护它,而无需添加您自己的小麻烦。

您提到的原因是万一“数据库受到损害”......如果发生这种情况,那么加密cookies既不存在也不存在,无论如何您都会遇到严重的麻烦。攻击者很有可能也可以访问您的代码,并可以使用它以最小的努力来解密 cookie。

关于会话,这取决于您的应用程序。如果您在 IIS 中使用内置 Session,这通常被认为是安全的(正在使用的特定会话由另一个存储在浏览器端的 cookie 引用),因为黑客必须对您的服务器具有重要访问权限为了实现任何妥协 - 再次,访问用户的会话将是您最不担心的问题。

于 2013-09-20T15:30:58.227 回答