【发布时间】:2010-09-13 11:36:44
【问题描述】:
我有一个忘记密码的页面,我需要向用户询问他的用户 ID,以便从数据库中向他提供他的密码,并且它正在工作,但是如果有人输入任何错误的用户 ID,该怎么办。
【问题讨论】:
标签: asp.net
我有一个忘记密码的页面,我需要向用户询问他的用户 ID,以便从数据库中向他提供他的密码,并且它正在工作,但是如果有人输入任何错误的用户 ID,该怎么办。
【问题讨论】:
标签: asp.net
请注意,其中存在一定程度的风险。如果您总是回复一条消息说用户 ID 不正确,那么这可以用来猜测您系统中的用户 ID。攻击者可以使用常用名称的变体暴力破解此表单,并最终获得大量用户列表。对于任何给定的帐户,这为他们提供了以该用户身份登录所需的一半信息。
我建议您显示一条消息,说明已向该帐户的电子邮件地址发送了一封电子邮件,其中包含重置密码的说明(其中包括重置所需的时间敏感密钥),无论用户 ID 是否是否在系统中找到。如果他们没有收到电子邮件,他们总是可以再试一次(假设第一次尝试包括用户 ID 中的拼写错误)。如果他们实际上不知道自己的用户 ID,则可以通过输入他们的电子邮件地址来使用另一个表单来恢复它(行为方式与此表单类似,始终在表单上显示成功并仅在适用的情况下发送电子邮件)。
【讨论】:
您必须执行以下 3 个步骤以确保严格的安全性。
1) 根据用户 ID 从数据库中获取用户信息。如果信息为空,则向用户发送一个错误,说明 UserId 无效。
2) a) 如果您在创建用户时注册了EmailId,则将密码发送到注册邮箱。 b) 如果您没有注册 EmailId,请询问并匹配用户注册时选择的安全问题。
3) 如果可能,请尝试将第 2) 点的 a) 和 b) 点结合起来,以提高安全性。
【讨论】:
您必须执行SELECT 以检查该记录是否存在,如果存在则继续。
【讨论】:
只需返回一条消息,说明他们输入了错误的用户 ID。
【讨论】:
如果你问如果他们完全给你另一个用户的有效 ID 你会怎么做,那么我假设你正在用你正在恢复的密码做一些非常不安全的事情(你不只是显示他们是你的密码吗?) - 大多数像这样的系统都会通过电子邮件向你发送密码,至少提供了只有关联的电子邮件帐户才会获得密码的安全性。
【讨论】:
SELECT * FROM users WHERE username = inputhere
if (mysql_num_rows($result) > 0)
{
// found it
}
else
{
// doesn't exist
}
这就是你要找的吗?
【讨论】: