`
paohui01
  • 浏览: 10759 次
  • 性别: Icon_minigender_1
  • 来自: 湖北
文章分类
社区版块
存档分类
最新评论

邮箱找回密码

阅读更多
最近要开发个功能邮箱找回密码的功能。

大致思路就是发送邮件→连接邮件里的URL→修改密码

重点就是如何生成这个url和如何解析这个url.

需要注意的是一个url只能修改一次密码,当同一帐号发送多封邮件,只有最后一封邮件的url

是有效的

初步想法这个url有3个参数:用户名,过期时间,数字签名.

数字签名 = MD5(用户名+'$'+过期时间+密钥key)

解析这个url的时候先验证数字签名,在验证过期时间。

这个方法的弊端在于如果谁知道密钥key,就能修改任意用户密码。

为了保证这个密钥key的安全性,密钥key在应用每次启动的时候随机生成。

,还剩一个问题,就是一个url只能修改一次密码。

这样的话就需要每次修改完这个密码以后,给做一个标记(在内存中保存用户名,

过期时间,数字签名),然后现在每次解析url的时候先验证签名,

然后验证该url是否修改过密码,最后验证过期时间。

内存里的标记在超过过期时间以后是需要清除的。需要做一个定时任务一天清除以下内存里的

过期标记。好象这样就差不多拉。

然后开始开发,开发完以后本机跑的没啥问题。

忽然发现一个问题,生产环境下是多个应用的集群环境,这样的话多个应用随机生成的

密钥key是不一样的。

那这样密钥key的生成后,只有放到数据库比较好拉。

最后的方案:

数字签名 = MD5(用户名+'$'+过期时间+密钥key)

数据库字段(用户名(主键),密钥key,过期时间)

url参数(用户名,数字签名)

密钥key的生成:在每一个用户找回密码时候为这个用户生成一个密钥key

然后生成过期时间,生成数字签名,生成url,发送邮件.

saveOrUpdate(用户名,密钥key,过期时间)

解析url:首先根据用户名从数据库中查找出密钥key和过期时间,没有则表示该请求

是伪造的或者过期的,然后验证签名,验证过期时间,都验证通过,就可以修改密码,

密码修改完以后,删除数据库中的记录。

还需要加一个定时任务,删除数据库中当前时间大于过期时间的记录。

这样就应该没啥问题拉,欢迎大家拍砖.

分享到:
评论
18 楼 treblesoftware 2010-04-08  
密码要找回,这个就不能使用MD5了,你根本不能回逆。
只能让他重置一个密码。
17 楼 dch1287 2010-04-08  
xkorey 写道
可以改下修改密码的流程,不一定非得生成和解析URL。URL可以是个能否修改密码的锁。用户点击下邮箱里的URL,下次登录系统就提示他必须修改密码。修改一次后。该URL失效。可以删掉该URL。这样就不存在过期时间、集群和key的问题。

当你忘记密码之后,请问你如何登陆呢
16 楼 xkorey 2010-04-08  
可以改下修改密码的流程,不一定非得生成和解析URL。URL可以是个能否修改密码的锁。用户点击下邮箱里的URL,下次登录系统就提示他必须修改密码。修改一次后。该URL失效。可以删掉该URL。这样就不存在过期时间、集群和key的问题。
15 楼 wujiazhao88 2010-04-08  
找回密码就算了,给他重置密码吧。密码应该都经过单向加过密的吧?
14 楼 dch1287 2010-04-08  
giginet 写道
没太清楚。
我的构想如下:
使用uuid随机生成一个key,然后把记录保存下来,包括过期时间之类的,统统存到数据库中。

用户点击链接的时候,就用这个key去匹配就行了。至于URL中还要存几个参数,那就随你了。

其实数据库中只要一条数据就行了,用userid进行匹配

以前实现过此功能,思路和这个类似。
随便搞一长串的随机字符auth_key,有意义也好,没意义也好,总之要看(研究)不出来是啥,全局唯一(组合使用uuid、时间、机器特征、随机数等)。
然后在db里有张表,用uid和这个auth_key关联,同时可以有过期时间的字段。
同一个uid,只有一条记录。
甚至可以有一个单独的程序(线程、进程)去扫描此表,过期的记录就删掉。

给用户的url里带回那个auth_key,到db里查查有没有记录,过没过期,然后就可以让用户修改密码了。
13 楼 zhangyou1010 2010-04-08  
mathfox 写道
为什么不直接把密码发到他用户的邮箱呢?


我也觉得直接发密码来得简单。
12 楼 mathfox 2010-04-07  
为什么不直接把密码发到他用户的邮箱呢?
11 楼 giginet 2010-04-07  
没太清楚。
我的构想如下:
使用uuid随机生成一个key,然后把记录保存下来,包括过期时间之类的,统统存到数据库中。

用户点击链接的时候,就用这个key去匹配就行了。至于URL中还要存几个参数,那就随你了。

其实数据库中只要一条数据就行了,用userid进行匹配
10 楼 paohui01 2010-04-07  
tryto21 写道
paohui01 写道
二十一 写道
如果用户要找回密码,那他应该会在较短的时间内来完成此事。所以生成一个有时间限制的url保存在cache里来比对比较合适

前面提到过,我这生产环境是集群环境,使用缓存不行。。。最开始我也是这个思路

你的缓存不支持集群吗?


恩 不支持。。。。。。
9 楼 tryto21 2010-04-07  
paohui01 写道
二十一 写道
如果用户要找回密码,那他应该会在较短的时间内来完成此事。所以生成一个有时间限制的url保存在cache里来比对比较合适

前面提到过,我这生产环境是集群环境,使用缓存不行。。。最开始我也是这个思路

你的缓存不支持集群吗?
8 楼 lovelong1 2010-04-07  
找回密码,MD5里面的密码哪里来的~?
7 楼 paohui01 2010-04-07  
二十一 写道
如果用户要找回密码,那他应该会在较短的时间内来完成此事。所以生成一个有时间限制的url保存在cache里来比对比较合适

前面提到过,我这生产环境是集群环境,使用缓存不行。。。最开始我也是这个思路
6 楼 二十一 2010-04-07  
如果用户要找回密码,那他应该会在较短的时间内来完成此事。所以生成一个有时间限制的url保存在cache里来比对比较合适
5 楼 paohui01 2010-04-07  
JE帐号 写道
觉得有个地方可以讨论下:
连续发两次找回密码请求,到底在数据库是生产一条数据还是两条数据?
一条数据貌似比较省事吧.


恩,这里用的是一条,保存数据库使用saveOrUpdate
4 楼 JE帐号 2010-04-07  
觉得有个地方可以讨论下:
连续发两次找回密码请求,到底在数据库是生产一条数据还是两条数据?
一条数据貌似比较省事吧.
3 楼 paohui01 2010-04-07  
ywlqi 写道
我不知道需求是怎样的,但我不太喜欢过期时间这点,万一用户没有及时的打开邮箱收到邮件,在用户体验这块似乎不是很友好。。。。


关于这个过期时间 可以设置成1天或2天或看需要设置。

如果不设置一个过期时间,那这个链接是能够在很久以后来修改这个密码的,感觉不太安全吧。
2 楼 ray_linn 2010-04-07  
MD5(用户名+密码+salt)就可以了
1 楼 ywlqi 2010-04-07  
我不知道需求是怎样的,但我不太喜欢过期时间这点,万一用户没有及时的打开邮箱收到邮件,在用户体验这块似乎不是很友好。。。。

相关推荐

    java邮箱找回密码

    "Java邮箱找回密码"功能是一种常见的用户身份验证机制,它允许用户通过已注册的电子邮件地址重置丢失或忘记的密码。下面将详细介绍如何使用Java来实现这个功能,以及相关的知识点。 首先,我们需要一个用户模型...

    PHP+Ajax邮箱找回密码.zip

    在"PHP+Ajax邮箱找回密码"项目中,PHP主要负责处理用户的请求,验证邮箱地址,发送验证邮件,以及处理用户提交的新密码信息。这包括检查邮箱是否存在于数据库中,生成并存储随机的验证码,通过SMTP协议发送带有...

    SpringMVC邮件找回密码功能

    在Spring MVC框架中实现邮件找回密码功能是一项常见的需求,它为用户提供了一种安全的方式来恢复丢失的账户访问。在这个过程中,用户通常需要通过已验证的电子邮件地址来接收包含特殊URL的邮件,点击该URL后,他们...

    邮件找回密码+无刷新验证码

    在网络安全领域,用户账户的安全性至关重要,而"邮件找回密码+无刷新验证码"是一种常见的增强安全性的技术手段。本文将详细解析这两个概念及其在实际应用中的工作原理。 首先,我们来了解一下邮件找回密码机制。当...

    PHP+Ajax邮箱找回密码

    在IT领域,尤其是Web开发中,"PHP+Ajax邮箱找回密码"是一个常见的功能,用于帮助用户在忘记密码时通过电子邮件重置其账户的安全设置。这个功能涉及到前后端交互、用户验证以及邮件服务等多个方面,下面将详细介绍这...

    邮箱找回密码java

    在Java编程领域,邮箱找回密码是一个常见的功能,用于帮助用户在忘记密码时通过验证绑定的电子邮件地址来重置账户安全信息。本程序的核心是利用JavaMail API实现邮件发送功能,结合后端验证逻辑来完成这一过程。以下...

    PHP+MYSQL通过邮箱找回密码开发源码

    PHP+MYSQL通过邮箱找回密码开发源码

    thinkphp邮箱找回密码

    综上所述,“thinkPHP邮箱找回密码”涉及到了Web开发中的多个重要技术点,包括框架的使用、数据库操作、邮件服务、安全性、用户体验以及测试策略。理解并熟练运用这些知识点,可以构建出高效、安全的密码找回系统。

    springboot qq邮箱找回密码

    总结来说,这个SpringBoot项目实现了利用QQ邮箱发送找回密码的邮件功能。通过配置邮件服务,创建邮件服务类,结合数据库操作,可以提供安全可靠的密码找回流程。同时,`u_user.sql`和`u_login.sql`以及`findpassword...

    Java实现邮件找回密码功能

    本文主要介绍了Java实现邮件找回密码功能的详细实现过程,该功能主要用于用户忘记密码后通过邮箱找回密码。下面将详细介绍该功能的实现步骤和关键技术点。 需求分析 在当前的系统中,用户注册时都会强制输入邮箱,...

    JSP 用户忘记密码通过邮件找回密码

    JSP 用户忘记密码通过邮件找回密码 JSP 用户忘记密码通过邮件找回密码

    ecmall_邮箱找回密码问题解决方案

    Ecmall是一款开源的电子商务系统,它提供了多种用户登录和找回密码的方式,其中包括通过注册邮箱来重置密码。针对"Ecmall_邮箱找回密码问题",我们来深入探讨一下可能遇到的问题及解决方案。 首先,Ecmall的邮箱...

    thinkphp发送邮件找回密码

    简单的实现发送邮件找回密码,运用thinkphp框架,很适合新手的操作模仿

    网站常用邮箱找回密码流程.rar

    在网站设计中,邮箱找回密码是...总的来说,"网站常用邮箱找回密码流程"是一个综合性的系统工程,涵盖前端交互、后端处理、数据库操作、网络通信等多个层面,对于开发者来说,理解和实现这一功能需要扎实的多方面技能。

    Java通过邮箱找回密码和注册

    总结起来,"Java通过邮箱找回密码和注册"涉及到的关键技术包括使用JavaMail发送和接收电子邮件,以及密码重置和电子邮件验证流程的设计。理解并掌握这些知识对于任何需要处理用户账户的Java开发者来说都至关重要。...

    邮箱找回密码验证

    public function send_email($judge_code,$user_email,$username){ import("@.ORG.My.base_mail");... $Subject='[111]找回您的帐户密码'; //发送邮件 $mail->SendMail($user_email,$message,$Subject); }

    java实现通过绑定邮箱找回密码功能

    "Java实现通过绑定邮箱找回密码功能" 本文主要介绍了Java实现通过绑定邮箱找回密码功能的知识点,以下是相关的知识点摘要: 1. 验证用户名是否存在:在找回密码功能中,首先需要验证用户名是否存在,这可以通过...

    E-mail邮箱密码找回工具(通过邮件客户端找回邮箱密码)

    E-mail邮箱密码找回工具 通过邮件客户端找回邮箱密码 你是否遇到了这样的麻烦,你长期使用foxmail,outlook等邮件客户端收发邮件,直到有天你需要到网站上去登录自己的邮箱,可是时间长了,邮箱密码却忘记了.如何找回邮箱...

    找回密码(简单实用)

    标签"JSP邮箱找回密码代码"暗示我们将讨论使用Java Server Pages (JSP) 技术实现的找回密码功能。JSP是一种服务器端脚本语言,常用于构建动态Web应用程序。在找回密码的场景中,JSP可以处理用户请求,验证信息,发送...

Global site tag (gtag.js) - Google Analytics