- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
当某人丢失密码时,他们单击丢失或忘记的密码链接。
他们需要输入电子邮件地址,然后回答自己的秘密问题
如果机密问题正确,则会向他们发送一封电子邮件,其中包含一个链接,该链接会在24小时后失效。
发送电子邮件时,将在数据库表中输入一条记录,其中包含以下信息:
-需要重设密码的人的电子邮件
-密码重置将过期的时间
-提交密码保留请求的时间。
发送的链接将引导用户到一个允许他们输入新密码的表单。
他们需要以这种形式输入电子邮件地址和密码X2。
当他们单击“提交”时,将对db进行检查,以确保电子邮件有效(已重置密码)并且尚未过期(通过比较两个日期以查看过期时间是否已过期),即24小时)
如果电子邮件有效且尚未过期,并且两个密码匹配并满足最小要求,则将应用新密码。
成功时会给出一条确认消息。
Q1。这是恢复密码的好模型吗?
Q2。如何确保发送到用户地址的链接是唯一的?没有人会得到相同的链接吗?这样一来,没有人可以进入密码重设页面并尝试不同的电子邮件,而是让每个需要重设的帐户都有自己的唯一URL,该URL仅适用于该帐户。
关于第二季度:
我在想,当用户请求重置密码时,会生成一个随机的唯一ID,并将其存储在24小时后到期的同一记录中。这个随机唯一ID的列可以称为“ rid”
电子邮件中将发送给用户的链接将以?rid = xxxxxxxxxxxxx结尾
当用户在重置密码的页面中单击“提交”时,页面顶部的“ rid”用于从数据库中获取相应的电子邮件地址,并将其与表单中的电子邮件地址进行比较。这样做可以确保每个密码重设案例将具有其自己的唯一URL,其他任何帐户都不能使用该URL来重设其密码。
这是可行的解决方案吗?
任何贡献或建议,将不胜感激。
最佳答案
最佳:
通过OpenID登录。更少的编码复杂度,更少的点击,更少的键入,更少的时间浪费。
做完了问题尚无定论。无需担心,其他人已经解决了这个问题。
有十亿个站点实施了十亿个身份验证方案,在99.999%的情况下,这是不必要的。我为什么要以用户身份信任您作为开发人员,所以不要以纯文本形式存储我的密码,也不要泄露密码或自己被黑客入侵?很少有人为每个站点使用不同的密码...
如果这不可能,那么make会尽可能轻松:
我单击“忘记密码了?”链接。如果我已经输入了电子邮件(例如,尝试登录失败后),它将自动发送一封邮件。如果我没有输入密码,只需隐藏密码字段并告诉我输入密码。不要重新加载或将我转发到其他页面。
我得到了一些键的链接(例如https://site.com/account/reset?key=a890ea8219175f890b7c123ee74a22
)。绑定到我的帐户的某些唯一哈希值会在数小时之内失效。尽可能使用SSL。
我单击链接,然后您通过密钥获取我的帐户详细信息,确保它有效且尚未过期。我输入两次新密码。我已经知道我的电子邮件地址是什么,并且您已经知道我的电子邮件地址是什么,并且任何可能的黑客也都会知道我的电子邮件是什么,因此请不要键入我的电子邮件。将链接持续一整天是过分的。在一个小时或更短的时间内超时。
我讨厌安全问题。别问我基本上,这只是第二个密码,故意使它的安全性降低,因此您将永远记住它。我没有飞行常客里程,也不知道母亲的娘家姓等等。停下来。我知道这里可以阻止可能入侵您电子邮件的陌生人,但是除非您是PayPal,否则我认为这是过度设计。
当您确认密码匹配并且可以接受时,请更新数据库(仅存储密码的哈希哈希,而不存储密码本身!)并立即登录。不要将我重定向到登录页面,在该页面上我必须重新输入我已经几次给您的信息(即使您已经知道是我并且对我足够信任,也可以更改自己的密码)。真烦人用户不耐烦。
我还不喜欢基于以下内容随机生成的密码:
通常,无论如何,我只是从邮件中复制粘贴密码。复制粘贴密码是您永远不希望用户执行的操作。
我必须手动更改密码,这意味着在用户控制面板或帐户设置中出现混乱。我不耐烦!在我使用一次性密码登录的那一刻,您可以使用“更改密码”来解决问题,但这意味着增加了代码复杂性。现在,您需要为此添加一个标志,添加另一个重定向,处理用户输入新密码时超时的情况,等等。
因为我只是人类,而人类却患有ADHD,所以我通常会忘记执行上述操作,最终我得到的密码都是垃圾密码,下次我也需要登录时,必须从电子邮件中查找并复制该密码。我的错,但我仍会为此归咎于您的网站。 ;-)
随机生成的密码解决方案也暗示着您将始终使用基于密码的解决方案的心态,当基于链接的身份验证似乎在可用性和安全性方面成为未来(OpenID等)时(我不希望有一百小网站知道我的登录详细信息!)。
更新以回复评论:
为什么散列就足够了:如果黑客能够(在一小时之内)猜出您生成的散列的全部128位(例如),那么为什么他(她)也不能猜出电子邮件?我知道询问电子邮件和/或安全性问题也“更加安全”,但是,如果您考虑一下,电子邮件通常非常可预测且统一,且熵率较低。我怀疑它们是否可以指望包含超过50位信息。 (可能少了很多。)我敢打赌,与50位随机整数相比,我会更快地猜测您的电子邮件。但是,如果真的很担心,您要做的就是向哈希添加更多位。 256位左右的字符应该用于过度杀伤模式-SHA256(salt, email, old pw hash, time stamp, maybe some bytes from /dev/urandom)
或类似的功能...如果黑客可以预测到这一点,那么您实际上无能为力。显然,他可以控制《黑客帝国》,如果他愿意的话,可以将他的思想投射到硬盘驱动器中的磁性磁盘上。
仍然是Pro-OpenID:我访问的任何我创建用户的新站点都应该非常令人信服,因为他们为什么想要知道我的(一次性)密码,以及他们在提供OpenID或Google / Facebook / etc等安全性方面为我提供了什么。不-或为什么他们不信任Google / Facebook / etc。 (我知道)没人记得30种不同的密码。通常,人们会重用它们,因此,如果这些第三方站点创建者愿意,那么对他们的用户进行欺骗确实非常容易。如果我使用惯常的信息在您的站点上注册,那么您可以立即接管我的Last.FM和Reddit帐户,大概还有我曾经使用过几次却忘记了的十几个站点。实际上,在当今时代,我有点希望站点如果想要严格不需要的详细信息,要么变得愚昧无知,要么怀有恶意,所以这就是为什么我将其称为一次性密码-每次注册时都感觉像我的意思是“在这里,拥有我的Reddit帐户,这与我将用于您的站点的L / P(否则我会忘记)。很好,我对此没有特别的依附。”当然,如果他们愿意的话,Google实际上可以接管我所有的在线自我,但是就目前而言,我将比您更信任Google(没有冒犯!)。
关于security - 查看我的设计:网站的密码重置功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3221788/
Internal Server Error: /admin/account/customuser/add/ Traceback (most recent call last): File "C:\
有问题!虽然我发现几乎相似的线程但没有帮助:( 我编写了一个 php 脚本来从我的 MySQL 数据库中获取注册用户的数量。该脚本在我的本地主机上运行良好;它使用给定的用户名、密码和主机名,分别是“r
我正在做一项基于密码的作业,我将 key 和消息放在单独的数组中。我想创建第三个数组,其中包含围绕消息大小的 key ,如下所示: message keykeyk 我已经在这个问题上苦苦挣扎了一段时间
我的几个客户要求我实现图形密码检查器,例如 关于如何实现这种 UI 有什么想法吗? 最佳答案 试着看看这个:https://code.google.com/p/android-lockpattern/
我正在使用 MAMP,每次登录 phpMyAdmin 时,都会收到以下错误/警告消息: the configuration file now needs a secret passphrase (bl
我正在尝试通过将 Visual Studio 2013 连接到我的测试机来调试 WDF 驱动程序。它创建一个名为 WDKRemoteUser 的用户,并在进行测试时尝试自动登录。有人知道这个用户的密码
使用具有指定用户名和密码的 SVN 提交。我希望服务器抛出错误;所以我可以告诉我的用户他/她的密码错误。 相反,在使用错误密码提交后: svn commit "test_file.txt" --use
我正在尝试实现 friend 推荐。 它从节点“你”开始。而且,我想找到节点“安娜”。 换句话说,这是我的两个或更多 friend 共同认识的人。上面的示例节点是 Anna。 如果您的帮助,我将不胜感
我都尝试过 wget --user=myuser --password=mypassword myfile 和 wget --ftp-user=myuser --ftp-password=mypass
我的一位用户提示说,每当他尝试使用默认管理界面(Django 的管理员)添加新用户(auth.User)时,新用户名和密码都会自动填充他自己的。 问题是他在登录时要求 Firefox 记住他的用户名/
我们正在开发一款应用(当然)用于应用购买 (IAP)。我已完成指南中的所有操作以启用 iap,并且一切正常,直到我想要购买为止。 部分代码: MainViewController.m -(vo
我试图创建两个可选匹配项的并集(如下所示),但我得到的不是并集,而是两者的交集。我应该如何更改此查询以获得所需的联合? optional match (a:PA)-[r2:network*2]-(b:
我想将Ansible用作另一个Python软件的一部分。在该软件中,我有一个包含其用户名/密码的主机列表。 有没有一种方法可以将SSH连接的用户/密码传递给Ansible ad-hoc命令或以加密方式
嗨,我在使用xampp的Apache Web服务器上收到错误500。直到我使用.htaccess,.htpasswd文件,错误才出现。我搜索了,但找不到语法错误。我只有1张图片和要保护的索引文件。以下
我一直使用它来编辑用户帐户信息: $this->validate($request, [ 'password' => 'min:6', 'password_confirmation'
我需要使用InstallUtil来安装C# Windows服务。我需要设置服务登录凭据(用户名和密码)。这一切都需要默默地完成。 有没有办法做这样的事情: installutil.exe myserv
已关闭。此问题不符合Stack Overflow guidelines 。目前不接受答案。 这个问题似乎不是关于 a specific programming problem, a software
如果我有一个随机的、16 个字符长的字母数字盐(不同大小写),它是为每个用户生成和存储的,我是否还需要一个站点范围的盐? 换句话说,这样好吗? sha1($user_salt . $password)
我正在开发一个空白程序,该程序将允许用户创建一个帐户,以便他们可以存储其余额和提款/存款。用户输入用户名和密码后,如何存储这些信息以便用户可以登录并查看其余额?我不一定要尝试使其非常安全,我只是希望能
我正在尝试寻找一种通用方法来搜索没有链接到另一个节点或节点集的节点或节点集。例如,我能够找到特定类型(例如 :Style)的所有节点,这些节点以某种方式连接到一组特定的节点(例如 :MetadataR
我是一名优秀的程序员,十分优秀!