首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >激活/注册/密码的最佳实践是什么?在与nonce的电子邮件中重置链接。

激活/注册/密码的最佳实践是什么?在与nonce的电子邮件中重置链接。
EN

Stack Overflow用户
提问于 2009-06-30 23:28:49
回答 3查看 31.2K关注 0票数 63

应用程序发送电子邮件来验证用户帐户或重置密码。我相信以下是它应该的方式,我要求引用和实现。

如果应用程序必须在电子邮件中发送链接以验证用户的地址,根据我的看法,链接和应用程序对链接的处理应该具有以下特点:

  1. 该链接在请求URI (http://host/path?nonce)中包含一个纳塞
  2. 在链接(GET)之后,用户将看到一个表单,可选地使用nonce。
  3. 用户确认输入(POST)。
  4. 服务器接收到请求并且
  • 检查输入参数,
  • 执行更改,
  • 并使现在的人无效。

这应该是正确的每一个HTTP RFC关于安全和幂等方法

问题是,这个过程涉及一个额外的页面或用户操作(第3项),许多人认为这是多余的(如果不是无用的)。我在向同行和客户展示这种方法时遇到了问题,所以我要求一个更广泛的技术小组对此提供意见。我反对跳过POST步骤的唯一理由是可能从浏览器预加载链接。

  • 是否有关于这个主题的参考资料可以更好地解释这个想法,甚至说服非技术人员(来自期刊、博客、.的最佳实践)?
  • 是否有实施这种方法的参考站点(最好是受欢迎的,并且有许多用户)?
  • 如果没有,是否有记录在案的理由或类似的替代方案?

谢谢,

卡里姆

细节豁免

我的主要部分是简短的,但为了减少对我有意遗漏的细节的过多讨论,我要补充几个假设:

  • 电子邮件的内容不是这个讨论的一部分。用户知道她必须单击该链接才能执行该操作。如果用户不作出反应,就不会发生任何事情,这也是众所周知的。
  • 我们不需要说明我们为什么要给用户发送邮件,也不需要说明通信策略。我们假设用户希望收到电子邮件。
  • nonce具有过期时间戳,并且与收件人电子邮件地址直接关联以减少重复。

Notes

有了OpenID等,普通的web应用程序就不再需要实现标准的用户帐户管理(密码、电子邮件.),但仍然有一些客户想要“自己的用户”

奇怪的是,我在这里还没有找到令人满意的问题和答案。到目前为止,我发现的是:

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2009-07-01 09:22:12

这个问题非常类似于在ASP.NET (C#)中实现安全、唯一的“单用途”激活URL

我的回答接近你的计划,并指出了一些问题--如短期有效,处理双重注册,等等。

您对密码学的使用也很重要,许多人倾向于跳过-例如“让我们只使用GUID”.

你提出的一个新观点,这一点很重要,就是GET的幂等性。

虽然我同意你的总体意图,但很明显,幂等性与一次性联系是直接矛盾的,在某些情况下,这是必要的。

我本想假设这并不是真的违反了GET的幂等性,但不幸的是它确实.另一方面,RFC说GET 应该是幂等的,而不是必须的。所以在这种情况下,我会说放弃它,坚持一次性的自动失效链接。

如果你真的想追求严格的RFC遵从,而不是进入非幂等(?)获取,您可以让GET页面自动提交POST -类似于RFC上的漏洞,但是是合法的,而且您不要求用户使用双optin,而且您没有窃听他.

你真的不必担心预压(你是在谈论CSRF,还是浏览器优化器?)CSRF是无用的,因为现在,优化器通常不会在预加载页面上处理javascript (用于自动提交)。

票数 27
EN

Stack Overflow用户

发布于 2009-07-16 16:26:02

关于密码重置:

通过向用户注册的电子邮件地址发送电子邮件的做法,虽然在实践中非常普遍,但安全性并不好。这样做可以将您的应用程序安全性完全外包给用户的电子邮件提供商。不管您需要多长时间的密码以及您使用的任何聪明的密码哈希,这都不重要。我将能够通过阅读发送给用户的电子邮件进入您的网站,因为我可以访问电子邮件帐户,或者能够在发送给用户的任何地方读取未加密的电子邮件(想想:邪恶的系统管理员)。

这可能重要,也可能不重要,这取决于有关站点的安全要求,但作为站点的用户,我至少希望能够禁用这种密码重置功能,因为我认为它不安全。

我找到了讨论这个主题的这份白皮书

关于如何以安全的方式做这件事的简短版本:

  1. 要求提供关于帐户的确凿事实
代码语言:javascript
运行
复制
1. username.
2. email address.
3. 10 digit  account number or other information like social security number.

  1. 要求用户至少回答三个预定义的问题(由您预定义,不要让用户创建自己的问题),这些问题不可能是微不足道的。比如“你最喜欢的度假地点是什么”,而不是“你最喜欢的颜色”。
  2. 可选:向用户必须输入的预定义电子邮件地址或手机号码(SMS)发送确认代码。
  3. 允许用户输入新密码。
票数 9
EN

Stack Overflow用户

发布于 2009-06-30 23:50:12

我大体上同意你以下的一些修改意见。

  1. 用户在您的网站注册提供电子邮件。
  2. 通过两个链接将验证电子邮件发送给用户帐户:( a)使用GUID的一个链接来验证注册( b)使用GUID的一个链接拒绝验证。
  3. 当他们从电子邮件中访问验证url时,他们会被自动验证,并且验证guid在您的系统中被标记为这样。
  4. 当他们访问电子邮件中的拒绝url时,他们会自动从可能的验证队列中删除,但更重要的是,您可以告诉用户您对电子邮件注册感到抱歉,并给他们更多的选项,比如从您的系统中删除他们的电子邮件。这将停止任何自定义服务类型的抱怨,有人输入我的电子邮件在您的system...blah之类的。

是的,您应该假设,当他们单击验证链接时,他们将被验证。让他们点击一个页面中的第二个按钮是有点多,只需要双选择样式注册,在那里你计划垃圾邮件的人注册。标准的注册/验证计划通常不需要这一点。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1066611

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档