2012-02-13 34 views
0

我正在编码通过电子邮件发送的链接,以便用户重置其密码。我想要这个链接保持两个参数“发送日期”和“用户ID”。因此,它可能看起来像向用户发送密码重置链接

www.resetpassword.aspx?senddate="..."&userid="..." 

我想这些参数应该被加密,哪些我想知道的是,是否有必要通过一些复杂的双向加密算法,我也可以在ASCII字符串只是转换为十六进制代码。

我应该让用户看到链接中有发送日期和用户ID吗?有没有通用的标准来做到这一点?

+5

**使用ASP.Net Forms Auth **。不要重新发明轮子。加密和安全是_hard_,看起来你还没有准备好。 – SLaks 2012-02-13 17:57:43

+0

你可以说Crypto和Security是一个PITA。 ;) – McKay 2012-02-13 17:58:49

+1

那么,我是一个新手程序员-_-# – pita 2012-02-13 18:21:09

回答

3

我不会加密它。当用户启动密码重置时,将随机令牌放入其用户详细信息中(如果您有数据库,则是)。根据该令牌进行验证。密码成功重置后,从数据库中删除该令牌。

+0

+1这与确切的时间戳结合应该是足够的,看起来。两者都可以在链接中传递。 – 2012-02-13 17:59:11

4

您需要包含密钥哈希以防止攻击者替换其他用户ID。

1

不要在查询字符串中显示UserId。

您可以在数据库中记录密码重置。创建一个散列并将其分配给UserId,SendDate,ExpiryDate,以及其他你需要的东西。

而是在查询字符串上发送散列,并在收到请求时,查找与其关联的详细信息。