哪种更好些呢?
我可以看到#2的一个优点是,您可以控制这些令牌。如果你想早点过期,你可以。我发现#1的一个困难是确保您发送的令牌确实是安全的和防篡改的。你完全依赖于不搞砸密码学。
ASP.NET 2.0是否有生成密码重置令牌的内置方法?
发布于 2013-02-22 23:28:43
创建一个完全不包含任何信息的随机令牌,并将其以用户名和过期时间链接到数据库中是目前为止最好的解决方案。
加密(和散列)用于存储和传输绝对必须发送的数据。如果有任何方法不需要发送加密或非加密的数据,就可以提供相同的功能和安全性,那么您应该使用该方法。换句话说,加密应该是保护数据的最后手段。
发布于 2013-02-23 08:35:20
这些令牌是密码等价物,因此必须满足类似的要求。但到目前为止,最大的问题是它不能被对手武断地猜测。因此,它不应与随机数据区分开来。
在对任何数据进行编码时,显然需要对其进行加密。现在,这可能涉及到您自己的某种程度的滚动,或者至少自己将密码原语组合在一起,这可能会出错(参见:别当戴夫)。
因此,这意味着您最安全和最简单的解决方案是创建一个非常随机的令牌,并将其存储在数据库中,并为该令牌存储一个id。加入id和令牌,并将其序列化为十六进制或Base32,并将其发送给用户。当令牌返回时,使用id从数据库获取令牌/salt,并对其余令牌进行散列,以查看其是否匹配。
你必须确保一些额外的东西关于令牌,因为他们将在人们的电子邮件。
发布于 2013-02-22 22:56:04
您可以将过期时间编码为令牌并使用HMAC,但是密码重置通常涉及访问特定的URL。通常,为了使用户更容易,其中一个包括在URL中的令牌作为一个GET字段。
为了保持URL相对较小,并且仅由可打印字符组成,您可能会将时间戳编码为整数,并使用固定宽度设置。这必须指定用户、到期日期和MAC。我认为它是可靠的,但它不是没有某种编码的努力。
因为您无论如何都需要访问一个密码的数据库,并且不需要考虑编码一个随机的固定宽度值,所以我只想这么做。在其他条件相同的情况下(我认为这是相当平等的),容易获胜。额外奖励:较低的CPU使用率。
https://security.stackexchange.com/questions/31361
复制相似问题