【问题标题】:Check availability of user id from the database检查数据库中用户 ID 的可用性
【发布时间】:2010-09-13 11:36:44
【问题描述】:

我有一个忘记密码的页面,我需要向用户询问他的用户 ID,以便从数据库中向他提供他的密码,并且它正在工作,但是如果有人输入任何错误的用户 ID,该怎么办。

【问题讨论】:

    标签: asp.net


    【解决方案1】:

    请注意,其中存在一定程度的风险。如果您总是回复一条消息说用户 ID 不正确,那么这可以用来猜测您系统中的用户 ID。攻击者可以使用常用名称的变体暴力破解此表单,并最终获得大量用户列表。对于任何给定的帐户,这为他们提供了以该用户身份登录所需的一半信息。

    我建议您显示一条消息,说明已向该帐户的电子邮件地址发送了一封电子邮件,其中包含重置密码的说明(其中包括重置所需的时间敏感密钥),无论用户 ID 是否是否在系统中找到。如果他们没有收到电子邮件,他们总是可以再试一次(假设第一次尝试包括用户 ID 中的拼写错误)。如果他们实际上不知道自己的用户 ID,则可以通过输入他们的电子邮件地址来使用另一个表单来恢复它(行为方式与此表单类似,始终在表单上显示成功并仅在适用的情况下发送电子邮件)。

    【讨论】:

      【解决方案2】:

      您必须执行以下 3 个步骤以确保严格的安全性。

      1) 根据用户 ID 从数据库中获取用户信息。如果信息为空,则向用户发送一个错误,说明 UserId 无效。

      2) a) 如果您在创建用户时注册了EmailId,则将密码发送到注册邮箱。 b) 如果您没有注册 EmailId,请询问并匹配用户注册时选择的安全问题。

      3) 如果可能,请尝试将第 2) 点的 a) 和 b) 点结合起来,以提高安全性。

      【讨论】:

        【解决方案3】:

        您必须执行SELECT 以检查该记录是否存在,如果存在则继续。

        【讨论】:

          【解决方案4】:

          只需返回一条消息,说明他们输入了错误的用户 ID。

          【讨论】:

            【解决方案5】:

            如果你问如果他们完全给你另一个用户的有效 ID 你会怎么做,那么我假设你正在用你正在恢复的密码做一些非常不安全的事情(你不只是显示他们是你的密码吗?) - 大多数像这样的系统都会通过电子邮件向你发送密码,至少提供了只有关联的电子邮件帐户才会获得密码的安全性。

            【讨论】:

              【解决方案6】:
              SELECT * FROM users WHERE username = inputhere
              
              if (mysql_num_rows($result) > 0)
              {
                // found it
              }
              else
              {
                // doesn't exist
              }
              

              这就是你要找的吗?

              【讨论】:

                猜你喜欢
                • 2013-04-16
                • 2016-09-04
                • 2021-03-20
                • 2016-08-31
                • 2019-11-08
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多