我是一家金融机构的程序员。我最近被告知要强制所有新用户 ID 至少有一个字母和一个数字。我立即认为这是一个可怕的想法,我宁愿不实施它,因为我认为这是一个反功能并且用户体验很差。问题是我没有很好的理由不执行此要求。
你认为这是一个很好的要求吗?
你有什么好的理由不这样做吗?
你知道我可以参考的任何研究吗?
编辑:这与密码无关。我们已经对此提出了类似的要求,我并不反对。
我是一家金融机构的程序员。我最近被告知要强制所有新用户 ID 至少有一个字母和一个数字。我立即认为这是一个可怕的想法,我宁愿不实施它,因为我认为这是一个反功能并且用户体验很差。问题是我没有很好的理由不执行此要求。
你认为这是一个很好的要求吗?
你有什么好的理由不这样做吗?
你知道我可以参考的任何研究吗?
编辑:这与密码无关。我们已经对此提出了类似的要求,我并不反对。
反对这一点的一个论点是,其他领域的许多用户名/ID 不需要数字组件。用户更有可能更好地记住他们在其他地方使用过的用户 ID——如果他们不需要包含数字,那就更有可能了。
此外,根据系统的不同,用户 ID 在连接到外部系统时可能会作为默认值正常工作(ssh 在类 unix 系统下会以这种方式运行)。在这种情况下,拥有一个在系统之间共享的 ID 显然是有益的。
在多个地方使用相同的 ID 可以提高一致性,这是良好软件界面的一个众所周知的方面。表明人们与系统交互的方式是用户界面并不难,并且应该遵守(至少一些)众所周知的界面指南。(显然,如果您正在考虑多个可能未知的系统之间的交互,则键盘快捷键之类的想法毫无意义,但一致性等方面确实适用。)
编辑:我假设这个讨论是关于用户名或公开可见的 ID,而不是与安全直接相关的东西,例如密码。
我会首先询问他们背后的具体原因。一旦你有了一个要点列表和原因,就更容易反驳或提供替代方案。
至于一般的想法:
请记住,身份验证系统越复杂,一般用户就越有可能找到绕过它的方法并使他们在链中的链接变弱。
用户 ID?要求密码为字母数字通常是一个好主意,因为它使密码更能抵抗字典攻击。这对用户名没有任何意义。拥有名称/密码组合的全部意义在于名称部分不必保密。
如果你在一家金融机构工作,可能有关于这类事情的规定,所以它很可能不在你的掌控之中。但是您可以做的一件事是在用户输入无效 ID 时让他清楚。不要等到他点击提交;在字段旁边显示某种消息,并在他键入时更新它。
上面的一些答案有一个相反的论点:如果用户选择他们在其他网站上使用的相同用户名,那么他们也可能为金融网站选择相同或相似的密码,从而降低安全性。
一个不这样做的理由:如果你对用户施加比他们习惯的更多的限制,他们会开始写下登录信息,这显然是安全性的损失。
我拥有的两个银行帐户都需要一个字母数字用户名和两个密码才能在线登录。其中一个也有我必须记住的图像。这两个密码必须每月更改一次左右。因此,我将所有登录信息都保存在一个文本文件中。(即使看也没有任何意义;我将不得不去银行再次重置我的密码。总共为 6 次登录重置了 7 次密码。谈论安全性,甚至我都无法访问我的帐户。)
如果它在他们的密码中很好(唉,金融公司喜欢否认你的这种担保权[我在和你说话美国运通])。
用户名,我说不,除非他们愿意。
在电话寻求支持时(可能)需要在电话上引用用户名,以便与密码不同的是,它会被公开。此外,用户名字段不会像密码字段那样在浏览器中被屏蔽,因此它将有更多的曝光度并在各个地方缓存/记录,因此增加的安全性的“好处”将立即失效。
而且你做的事情越难,用户就越有可能把它写下来,这又会破坏安全性(实际上同样适用于密码策略,但那是另一回事了!)
我也在一家金融机构工作,我们的用户名(真实的人和生产 ID)都是小写字母,最多 8 个字符,我从来没有认为这是一个问题......避免了 0 与 O、1 与我和 8 vs B - 除非你和我在同一家公司工作并且即将实施新政策......
添加任何功能都会增加成本。现在需要时间来构建和测试它,并在未来支持它。没有充分的理由就不应该构建任何功能。
这个功能毫无意义。用户名不应该保密,因此拥有强大的用户名没有任何优势。花时间使密码(或其他身份验证因素)变得强大可能是值得的,但用户应该能够将他们的用户名传达给其他用户,而不会有安全风险。
如果您的应用程序对用户 ID 的选择施加了额外的限制,那么您的一些用户对于您的应用程序的用户 ID 将与您环境中的其他应用程序的用户 ID 不同。注意:我假设这是一个内部应用程序(供员工使用),而不是面向 Internet 的应用程序。
用户名不一致会增加许多特定风险: