这是错的吗? - 将身份验证令牌存储在数据库中,并为每个请求将其与保存在cookie中的令牌进行比较

时间:2013-09-20 15:10:23

标签: asp.net asp.net-mvc-3 authentication cookies formsauthenticationticket

问题:

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

情境:

  1. 用户输入他的用户名&密码。
  2. 如果找到用户,他将获得身份验证。
  3. 身份验证令牌存储在数据库中。
  4. 加密的经过身份验证的令牌存储在cookie&寄去 客户端。
  5. 当用户请求保存身份验证令牌的方法时 在cookie中被解密并与存储在中的令牌进行比较 数据库中。
  6. 我的问题:

    1. 这种方法是否安全?优点?缺点
    2. 我可以使用这种方法的会话,所以我将不得不这样做 与每个请求进行比较?
    3. 备注:

      1. Cookie过期日期设置为创建后的60天。
      2. 使用过的ORM是Rob Conery的Massive。

1 个答案:

答案 0 :(得分:1)

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

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

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

你提到了“数据库遭到入侵”的原因......如果发生这种情况,那么加密的cookie既不在这里也不存在,无论如何你都会遇到严重的麻烦。攻击者很可能也可以访问您的代码,并可以用它来轻松解密cookie。

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