4

我正在使用 ASP.NET,我使用自己编写的自定义身份验证提供程序,散列和加盐已到位,因此它应该相对安全。

我还实现了一个像这样工作的自定义身份验证会话机制。

  1. 用户登录到 Web 应用程序,根据 mssql db 中的数据验证密码。
  2. 将新行插入到“会话”表中,其中包含对登录用户的引用、身份验证令牌和到期日期。
  3. 身份验证令牌与 cookie 一起返回,并存储在客户端的计算机上。
  4. 身份验证令牌用于识别用户。

它工作得很好,但我不确定这是正确的方法,因为我可以看到潜在的安全风险,例如,如果有人侵入数据库并更改用户 ID,或者获取身份验证令牌,或者我错了吗?

PS 不幸的是,我不能使用内置的身份验证/会话处理,因为我们的客户要求这样做,而且我们必须支持其他数据库引擎,例如 mysql、oracle/etc,所以请不要建议 :)

4

1 回答 1

1

我认为这几乎是安全的。

为了减轻您在查看数据库时对所有内容都受到损害的担忧,有一些方法可以解决这个问题。如果您不担心扩展到多台服务器,您可以在应用程序启动时生成一个密钥。然后使用此密钥对每个会话进行“签名”。因此,您可以对类似的东西进行哈希处理auth token+server key+expiration,然后您可以在会话的每个请求上验证这一点。

至于能够窃取身份验证令牌的人,您在这里只有这么多选择。作为参考,这被称为“重放攻击”。它们很难在不使您的网站烦人的情况下阻止它们(哦,您想从这一页打开 3 个选项卡,您将不得不登录,因为它是重播)有关更多信息,请参见维基百科。这在很大程度上取决于您需要的“安全程度”。

于 2013-02-26T15:49:33.180 回答