应用程序发送电子邮件来验证用户帐户或重置密码。我相信以下是它应该的方式,我要求引用和实现。
如果应用程序必须在电子邮件中发送链接以验证用户的地址,根据我的看法,链接和应用程序对链接的处理应该具有以下特点:
http://host/path?nonce)中包含一个纳塞。这应该是正确的每一个HTTP RFC关于安全和幂等方法。
问题是,这个过程涉及一个额外的页面或用户操作(第3项),许多人认为这是多余的(如果不是无用的)。我在向同行和客户展示这种方法时遇到了问题,所以我要求一个更广泛的技术小组对此提供意见。我反对跳过POST步骤的唯一理由是可能从浏览器预加载链接。
谢谢,
卡里姆
细节豁免
我的主要部分是简短的,但为了减少对我有意遗漏的细节的过多讨论,我要补充几个假设:
Notes
有了OpenID等,普通的web应用程序就不再需要实现标准的用户帐户管理(密码、电子邮件.),但仍然有一些客户想要“自己的用户”
奇怪的是,我在这里还没有找到令人满意的问题和答案。到目前为止,我发现的是:
发布于 2009-07-01 09:22:12
这个问题非常类似于在ASP.NET (C#)中实现安全、唯一的“单用途”激活URL。
我的回答接近你的计划,并指出了一些问题--如短期有效,处理双重注册,等等。
您对密码学的使用也很重要,许多人倾向于跳过-例如“让我们只使用GUID”.
你提出的一个新观点,这一点很重要,就是GET的幂等性。
虽然我同意你的总体意图,但很明显,幂等性与一次性联系是直接矛盾的,在某些情况下,这是必要的。
我本想假设这并不是真的违反了GET的幂等性,但不幸的是它确实.另一方面,RFC说GET 应该是幂等的,而不是必须的。所以在这种情况下,我会说放弃它,坚持一次性的自动失效链接。
如果你真的想追求严格的RFC遵从,而不是进入非幂等(?)获取,您可以让GET页面自动提交POST -类似于RFC上的漏洞,但是是合法的,而且您不要求用户使用双optin,而且您没有窃听他.
你真的不必担心预压(你是在谈论CSRF,还是浏览器优化器?)CSRF是无用的,因为现在,优化器通常不会在预加载页面上处理javascript (用于自动提交)。
发布于 2009-07-16 16:26:02
关于密码重置:
通过向用户注册的电子邮件地址发送电子邮件的做法,虽然在实践中非常普遍,但安全性并不好。这样做可以将您的应用程序安全性完全外包给用户的电子邮件提供商。不管您需要多长时间的密码以及您使用的任何聪明的密码哈希,这都不重要。我将能够通过阅读发送给用户的电子邮件进入您的网站,因为我可以访问电子邮件帐户,或者能够在发送给用户的任何地方读取未加密的电子邮件(想想:邪恶的系统管理员)。
这可能重要,也可能不重要,这取决于有关站点的安全要求,但作为站点的用户,我至少希望能够禁用这种密码重置功能,因为我认为它不安全。
我找到了讨论这个主题的这份白皮书。
关于如何以安全的方式做这件事的简短版本:
1. username.
2. email address.
3. 10 digit account number or other information like social security number.
发布于 2009-06-30 23:50:12
我大体上同意你以下的一些修改意见。
是的,您应该假设,当他们单击验证链接时,他们将被验证。让他们点击一个页面中的第二个按钮是有点多,只需要双选择样式注册,在那里你计划垃圾邮件的人注册。标准的注册/验证计划通常不需要这一点。
https://stackoverflow.com/questions/1066611
复制相似问题