我正在开发一个网站,人们将在其中拥有帐户。但是,与大多数网站不同,用户不注册,而是由网站管理员邀请。网站管理员将根据他们的电子邮件地址创建一个新的用户个人资料,然后希望网站通过电子邮件向他们发送电子邮件,告知他们他们的个人资料已可以使用。让人们知道其密码的最安全方法。在常规注册中,用户输入其选择的密码,该密码会进行散列并存储。剩下的就是向他们发送链接以验证他们的电子邮件地址。

在我们的情况下,他们没有注册,因此不要提供密码。什么是最安全的处理方式?

此答案建议向他们发送指向可以查看其密码的页面的链接,但是我不确定与将其发送至可以访问密码的页面相比是否有任何好处他们可以输入自己的密码。实际上,我认为后一种建议更好,因为好像已经设置了密码,网页可以通知他们已经设置了密码,如果不是,请立即与管理员联系。

从安全角度来看,最好的方法是向新用户通知其密码?

评论

顺便说一句,通过邮件发送一次性链接或一次性初始密码没有什么区别,无论更容易实现。两者都将依赖于电子邮件安全性,这是薄弱的,但是是一种常见的信任模型。因此,除非您没有其他联系信息或用户的加密密钥,否则就必须使用该信息。确保他们发现一次性物品不起作用(因为有人使用过)会提醒您

为什么根本没有密码。为什么不使用通过电子邮件发送的限时一次链接使用无密码登录。

最安全的方法是个人联系。

您想要真正的最安全的方法,还是合理实用且方便的最安全的方法?例如,如果您的CTO亲自拜访每个用户,以面对面的方式告诉他们他们的密码,那是非常安全的,但是却不切实际。

@marstato这一切的拳头要比使用“ password”作为密码要安全得多,但是我说的是初始密码,首次登录时必须更改。

#1 楼

在这种情况下,最佳做法是向他们发送指向页面的链接,他们可以在其中设置自己的密码。

您应该确保在他们使用此链接进行注册之后,该链接不能用于帐户接管。实现此目的的一种方法是在URL中包含时间限制的一次性令牌。

评论


评论不作进一步讨论;此对话已移至聊天。

–Rory Alsop♦
19年6月26日在13:32

-1这个答案很简洁。 “最佳实践是X”……可以,但是为什么呢?这个答案在目前的形式上是毫无用处的。

–吕克
19年6月26日14:25



与注册页面的一次性链接相比,与强制您在登录时更改密码的临时密码有什么不同?

–曼上尉
19年6月26日在15:11

好处(对User3399答案的评论)似乎是UX:如果要向用户提供临时密码,还应强制用户立即更改它。但是,为什么还要包括为他们提供临时密码的额外步骤呢?为什么不给他们一个链接来设置密码呢?另外,后者更易于编码。 @DavidWaters可能值得编辑您的答案以表明这一点(或您认为有什么好处,即为什么是最佳实践)。

–鲍勃
19-6-26在16:36



@bob请阅读已转到聊天的讨论,这已经开始了:)。您不必提供临时密码,最好是通过电子邮件发送一个链接,该链接在用户互动后会生成一个永久密码(以确保它不是链接检查器)。但是,可以,无论哪种方式,都应编辑答案以表明其原因。

–吕克
19-6-27在7:11



#2 楼

您应该只向新创建的用户发送一个链接,他们可以在其中设置自己的密码。但是请考虑以下想法,以防止滥用,因为邮件以纯文本形式发送:


请确保该链接只能使用一次(因此,仅当用户还没有密码时) )
可以设置一个日期,直到需要设置密码为止,否则他们需要请求一个新链接
生成随机链接,因此(几乎)不可能猜出电子邮件的链接
再增加一个验证步骤(例如要求他们输入电子邮件地址和/或生日)


评论


我有点同意额外的验证步骤,但是我不会将其作为电子邮件或生日。这些通常被认为是很容易找到的公共信息,或者通常很容易在各种社交媒体平台上共享。理想情况下,您希望可以自动验证但不容易进行数据挖掘的内容,尽管我不知道这可能是什么。

– Nzall
19年6月24日在13:36

@Nzall取决于网站和对安全性的需求,但是如果用户输入信用卡,则可以通过这种方式验证其姓名。

– gsquaredxc
19年6月24日在15:24

不要使用信用卡验证;很多人的名字与信用卡上的名字不符,其原因有很多(共同账户,更名过程中,非罗马文字的本地化等),而且不是每个人都拥有一张信用卡。

–蓬松
19年6月24日在20:51

@GrantGarrison为什么地球上除非要处理购买,否则会一方面将信用卡信息移交给任何页面?这尖叫网络钓鱼的企图。

–弗兰克·霍普金斯
19-6-25在0:25



根据用户电子邮件提供商的不同,您还可以至少防止中间监听-例如如果您在端口587上连接到gmail并验证其SSL证书,则可以合理确定只有最终用户才能阅读电子邮件。

–Wayne Werner
19年6月25日在4:30

#3 楼

根据我的经验,通常以两种方式完成。

David Waters已经描述了一种方式,因此我不再赘述。

要向他们发送一次性使用密码,直到他们必须在特定时间段(通常是48小时窗口)内更改。

使用此方法,您需要确保他们收到随机密码wich具有足够的安全性,不会被暴力破解。它是唯一的,无法再次使用。选择。

评论


如果您向新用户发送带有只能随机打开一次的长随机令牌的链接,则实际上没有时间限制。我为几年前工作的大型托管公司创建了这样的系统,并将其集成到他们的支持系统中,因此可以生成新的密码,生成的令牌以及带有URL的电子邮件,然后按一次即可发送。按钮。

– P. Goetterup
19年6月24日在11:04

从用户体验的角度来看,我认为这种解决方案会更糟。如果在首次登录后需要更改密码,那有什么意义?让我直接设置一个密码,而不必复制粘贴(或键入)一个临时密码,然后设置一个新密码。 (只要有可能)。

– Marc.2377
19年6月24日在17:31

@ Marc.2377如果系统仍然要求定期更改密码,则该过程与X倍的时间后更改定期密码的过程相同,在这种情况下,这是用户已经知道的过程。从UX的角度来看,我宁愿稍微偏于某些新流程,而从技术的角度来看,我更希望能够重用许多现有的流程/代码。但是,如果不存在这样的过程,我将与您同在。

–弗兰克·霍普金斯
19年6月25日在0:28

@ P.Goetterup在原始用户忽略邮件并“忘记”邮件的情况下,该时间限制可以防止恶意访问,但在某个时候,入侵者可以访问他找到邮件的邮件帐户,并且仍可以使用重置链接。在时间限制下,入侵者访问权限的这种扩展是不可能的。当然,这可能不是什么大问题,但是在某些情况下,这可能只是前雇员的一些旧通讯的简单丢失与对主要客户数据库,财务管理工具等的违反之间的所有区别。

–弗兰克·霍普金斯
19年6月25日在0:31

@ P.Goetterup,因此是否必要实际上取决于安全性要求。那不是在您的情况下,并不意味着它不是在所有其他情况下。尽管理所当然地得到了OP的问题-以及他需要在这里提出的事实-使得OP的系统对安全性的要求不高(希望^^)。

–弗兰克·霍普金斯
19年6月25日在0:33

#4 楼

要求您的用户通过OpenID或Oauth提供程序(例如Google,Microsoft,Amazon等)进行首次身份验证,以验证其身份。这避免了将密码通过电子邮件发送给用户的任何安全问题。

评论


有人可能会问,为什么要使用OpenID或OAuth的人甚至都没有用户名/密码。

–蓬松
19年6月24日在20:52

@fluffy,反之亦然,如果用户选择使用电子邮件/密码来避免使用任何公共SSO / OpenID解决方案,则在完成一些注册步骤后,他会像疯子一样大笑,然后被要求通过任何此类提供商进行登录^^

–弗兰克·霍普金斯
19年6月25日在0:35

@fluffy在许多情况下,提供程序已中断或消失了。特别是如果您允许外部提供商,则至少必须从中进行恢复。但是,是的,如果您想远离帐户管理或依赖其他帐户,则取决于服务产品的深度。

–eckes
19年6月25日在8:10

#5 楼

因此,用户拥有一个具有关联电子邮件地址的帐户,但尚未设置密码。这与他们设置但忘记密码时的情况完全相同。

因此,请实施“忘记密码”过程,该过程允许用户通过电子邮件请求链接以设置新密码。 。然后让您的用户在首次使用其帐户时使用该过程设置密码。您可以在创建帐户时将其密码设置为随机生成的字符串。

这使您可以自己创建自己的帐户,而不必生成一次性或过期的URL 。如果他们从不使用自己的帐户,则密码将保留为该随机生成的字符串,该字符串应足够安全以防止强行尝试。

#6 楼

在我看来,电子邮件是一种常用的通信渠道。通常认为它是安全的,如果每个人都可以正确设置某些东西,例如将SSL / TLS连接用于POP3 / IMAP或SMTP,则可能是正确的。实际上,并非所有人都知道这些技术有什么用,只是在没有传输安全性的情况下向前发展,因此配置了错误的系统。那么如何解决这个问题呢?

我想说会有一种更安全的方式为您的客户提供帐户。考虑一下您的手机。无需进行设置即可使用。这样就不会出现配置错误的问题。因此,让我们考虑一下。我知道SMS令牌和电话也不是那么安全,但是将另一部电话中的SMS重定向到黑客电话要困难一些。那么,为什么不使用电话号码向他们发送一次密码,以供他们在设置页面上使用并完成注册呢?我会说,使用电子邮件比使用电子邮件将更安全。

无论如何,如果您要使用电子邮件,我不会为用户设置密码并将其发送给他们。我有一些理由考虑为什么不应该这样做,让他们自己设置密码:


如果您发送密码,一些用户可能会认为您存储了它们会散列,并且您可以看到它,即使它们不是真的,您也不会信任您。
一些用户没有更改密码并将其保留为已发送的密码。
如果客户离开了为原始密码输入密码,并且某人可以访问其他电子邮件帐户或发件人的电子邮件,他得到了密码。靠自己。

评论


我不愿意将我的电话号码提供给某个网站。这是一条个人身份信息,这是一个非常可靠的个人标识符,当掉入不正确的人手中时,很容易被滥用或骚扰。如果您的服务要求我提供您的电话号码,那么我将不使用它。

– Philipp
19年6月24日在10:35



@Philipp是我也这样做,但是如果我想从公司获得服务,则需要正常提供。我认为问题在于我们不知道公司提供的服务。如果这是社交媒体Plattform,我不会给他们我的电话号码,但是如果是托管服务,并且他们有一天需要与我联系,该怎么办?正如他所说,他们需要管理员来设置所有内容,这不是正常的服务。

–CDRohling
19年6月24日10:39



我曾与多家托管公司合作,但从未通过电话与一家托管公司通话。与他们的所有通信通常都是通过电子邮件进行的。他们要求提供电话号码的原因是,如果您不支付托管费用,则可以使用PII来跟踪您。

– Philipp
19年6月24日在10:46

@Philipp我理解您的观点,但有时别无选择。如果您需要服务,则需要提供电话号码。否则,您将无法从他们那里得到它。我认为普通客户会理解这一点,并且这种做法没有问题。 Anayway,问题是如何以最安全的方式提供密码,这就是我的想法。如果好还是不好,他需要自己考虑一下。但是,谢谢您的投入!

–CDRohling
19 Jun 24'在10:50



我同意,除非我们知道服务的详细信息,否则没有理由取消两因素身份验证。此外,在这个问题上,不愿提交电话信息是一个信任问题,而不是信息安全问题。

–古努迪夫
19年6月24日在11:24

#7 楼

最广泛使用的方法是向用户发送一个链接,以创建自己的密码。
但是,如果这不切实际(例如,因为您尚未开发该网站的这一部分),并且仍然想邀请用户通过手动为他们提供第一个密码,在您旁边,使用“一次性密码”。
那里有很多服务,但是https://onetimesecret.com很容易记住。
不要如果其他人已经读过他们的机密(例如,FSB或NSA已经访问了他们的帐户),请告诉他们通知您;-)

请单击此处,获取您需要访问我们的机密仅限邀请的服务。
如果收到以下警告:
未知秘密
它不存在或已被查看。
请立即通过+00800 IVEBEENHAD与我们联系
/>

评论


不幸的是,许多防病毒程序都会阅读电子邮件,从而使一次性查看工作流程无效。另一方面,使用USE令牌创建密码是安全的。如果政府机构例行阅读随机电子邮件来违反法律,除非他们为您完成了工作流程,否则他们将不会知道密码。

–种类未知
19年6月26日在10:43

@gburton阅读电子邮件并获取其中的HTTP链接?请在聊天中ping我,以进行详细说明,因为我从未听说过。

–法比
19年6月26日在14:14

我没有时间,但是从我的头上知道诺顿做到了。 IIRC是杀毒软件的一个相对普遍的功能。如果您考虑一下,这是有道理的,尤其是当他们提供电子邮件网络钓鱼防护时。当一个客户端的300个用户无法重置其密码时,我不得不陪审评审软件来解决此问题。

–种类未知
19年6月26日在15:03

我现在就按你的话... ;-) @gburton

–法比
19年6月26日在18:54

#8 楼

发送链接以使用随机生成的一次性令牌设置自己的密码。您现在正在做的事情违反了一些安全原则:

1)网站管理员不应该知道用户的密码

2)永远不要以明文形式发送密码

确保令牌是随机生成的,可以防止攻击者强行强制使用可能的令牌,然后自己设置密码。用户设置自己的密码消除了对安全分发渠道的需求。我还建议对令牌设置一个时间限制,然后必须生成一个新的时间限制。这样可以避免未设置密码的用户可以猜测其令牌并劫持其帐户。

评论


“这将防止未设置密码的用户可以猜测其令牌并劫持其帐户的情况。”因此,请使用长令牌。设置时间限制并不会真正增加IMO的安全性值。

–以前
19年6月26日在9:04

难以猜测的令牌很难猜测,但是时间限制也意味着无法使用已泄露的令牌。很难破解的,很长且难以猜测的令牌仍然是一个安全问题。不过,我应该对答案中的折衷方案更加清楚。

–史蒂夫·加佐(Steve Gazzo)
19年6月27日在15:55

#9 楼

我会向所有人发送同一封电子邮件(来自admin@InvitedTrading.com)(电子邮件之间的唯一区别是自动生成的较长的帐户代码#不能强行使用):

A new trading account #3298889119019881 is available for you.

To activate it, please:
  1) Respond to this email with the words "I accept with password suffix X"
  2) Then, log in to https://InvitedTrading.com using username=<your email> and password=<3298889119019881 + private details + X>
      <private details> is a string of first name, last name, birthdate, and social security number
      E.g., "3298889119019881JohnDoe06251984123456789f76djisuh" for John Doe, born June 25, 1984, with social security number 123456789, with X=f76djisuh
  You must then change your password and can change your username if desired

Or, do nothing and all will be deleted in 48 hours.

If you do not trust https://InvitedTrading.com or have any reason to doubt that they should already know your
private details above, please do nothing.


评论


由于必须为期望具有一定水平的技术知识的人群开发一个网闸的人,我可以向您保证,此方面的用户体验会使许多不擅长计算机或英语的人感到困惑(因此会导致很多用户无法注册),这将被视为网络钓鱼。

–以前
19 Jun 26'在9:03



我同意,该程序需要完善并可能标准化。仅涵盖“单因素加个人因素”身份验证的所有可能检查。

– bobuhito
19年6月26日在16:42