最近,著名的可用性专家 Jakob Nielsen 撰写了一篇名为 停止密码掩码 的文章,其中他声称在用户输入密码时隐藏它们是不好的做法。他指的是 <input type=password … /> 元素的默认浏览器行为,其中输入的文本会变成点而不是显示输入的真实字符。他说,这会降低用户对其输入内容的信心,从而引发一系列问题,例如更多输入错误、用户选择过于简单的密码或复制粘贴复杂的密码(安全性较低)。最终效果是用户满意度降低,以及您可能获得的利润减少。
当然,他在这些方面都是正确的,但是密码掩码并不是为了好玩而开发并设置为默认的。它是为了防止窥视者查看您的屏幕并了解您的密码。Jakob 并没有忽略这一点,他建议将其设置为复选框样式选项。
诚然,有人偷看你的屏幕来获取密码的情况非常罕见。我现在独自一人在办公室,就像我大部分时间一样,我敢打赌角落里的那盆植物没有任何秘密摄像头。我相信你们很多人也处于类似的环境中。但我认为将重要的安全措施留给用户通常不是一个好选择。 Gruber 链接到 Jakob 的文章,并指出 iPhone 已经有一个有趣的解决方案在使用。
iPhone 如何处理密码输入
- iPhone 输入会将文本转换为点,就像网页密码输入一样,但在短暂延迟后,您可以短暂看到输入的字符。
- 当您按下每个字符时,iPhone 键盘会弹出一个窗口,以可视方式验证您刚刚输入的字符。
这是一种非常棒的处理密码输入的方式,可以将其应用到 Web 上。这种处理密码输入的方式结合了提供更好的按键反馈、提高用户信心以及大部分隐藏密码以使其更难以被随意查看的功能。
我们可以使用 jQuery 来复制这两个想法!
显示按下的键
这里有一些带有密码输入的超级简单的表单标记
<form action="#" id="login-form-1">
<div>
<label for="user-password">Password</label>
<input type="password" id="user-password" name="user-password" />
</div>
</form>
我们将使用该内部 div 设置一些相对定位,然后为一个特殊的 div 设置一些样式,我们将动态地插入其中以显示按下的键。
#login-form-1 div {
position: relative;
}
#login-form-1 div #letterViewer {
display: none;
position: absolute;
left: 240px;
top: -30px;
width: 100px;
font: bold 72px Helvetica, Sans-Serif;
}
然后使用 jQuery,我们可以附加该 div 并将按键事件附加到输入。当按下键时,该 div 将淡入显示字母,然后淡出。这将模拟 iPhone 键盘按下字母的验证。
$(function() {
$("#login-form-1 div").append("<div id='letterViewer'>");
$("#user-password").keypress(function(e) {
$("#letterViewer")
.html(String.fromCharCode(e.which))
.fadeIn(200, function() {
$(this).fadeOut(200);
});
});
});
当然,您可以根据需要对其进行任何样式设置。
将文本更改为点/仅显示最后一个字符
下一个理论是在您键入文本时将其转换为点,但在短暂延迟后允许您短暂看到输入的字符。这有点困难。您可以将密码输入更改为 type="text" 类型,但是随后将值更改为点会很麻烦,因为当然您需要提交字段的真实值而不是点。您不能将输入保留为 type="password" 类型,因为在这些输入中除了点之外什么也无法显示。
解决方案是**复制**密码字段,将其更改为文本输入,并隐藏原始字段。这样,您可以使用新字段并根据需要对其进行操作,但最终您提交现在隐藏的密码输入,您会使用当前键入的数据对其进行更新。
我们可以着手编写此代码,但幸运的是,DECAFo 博客已经完成了繁重的工作,并 创建了一个 jQuery 插件 来执行此操作。
只需定位您的密码输入并调用插件即可
$('#user-password-2').dPassword();
当然,像任何好的插件一样,您可以将一堆选项作为参数传递,例如切换之前的延迟、复制输入的前缀等等。
你们怎么看?这是一种好的折衷方案还是两败俱伤的结果?
虽然第一个“已知问题”(# 从中间添加/删除字符不起作用。仅在密码末尾有效。)让人有点担心——但与此同时,我从未发现自己在中间删除字符。
所以,我认为这是一个非常好的视觉增强功能,可以提高可用性并防止即使是高级用户也可能犯的输入错误。
非常感谢您发布此内容。在 Jakob 的文章发表后,我一直在思考是否有比完全消除掩码更好的方法。
然后我注意到我的基于 Windows Mobile 的手机在短暂延迟后会掩盖字符,就像您在此处描述的那样。我记下了这一点,认为这将是在我的项目中尝试模拟的一种好方法,但您现在已经为我完成了繁重的工作,我对此表示感谢。
诺基亚的操作系统自古以来就具有这种延迟。好奇的是,iPhone 在其他人设计多年后总是因其良好的设计而获得赞誉……
我相信我的最后两部手机都这样做过(Sanyo MM-8300 和 Palm Centro),至少它们上的一些 Web 浏览器是这样做的。非常有用。
但是,如果您想要吸引眼球,请在标题中加上“iPhone”,人们就会乖乖地阅读它。不能责怪作者这样做。公平地说,作者可能从未见过其他用法,因此 iPhone 将是他们的第一个示例。
感谢提及!
似乎所有三个问题都将在插件的即将发布版本中得到修复。
来自柏林的问候!Dirk(DECAF)
嗯,老问题了 :)
我知道安全很重要,但我必须承认
我们生活在一个密码的世界里……不是吗?
25岁之前,我的生活中很少有密码,现在我有很多……而且它们越来越长:)。
但回到问题本身
互联网上没有什么真正安全的东西。它可能仅与密码所在的来源一样安全。因此,如果您在 xy 表单上作为用户订阅,您无法保证您的数据是“安全”的?人们如何处理您的数据?一旦您“取消订阅”作为用户,几乎没有任何“删除”过程的迹象?您的帖子不会被删除,您的数据也不会被删除吗?
它似乎在 IE 7 中不起作用。
这是一个已知错误吗?
不起作用……
这是一个不错的功能。例如,诺基亚手机还有另一种方法可以做到这一点。它们会显示输入的字母一小段时间(0.5-1 秒),然后将其转换为星号。
当您的密码包含大写字母和/或特殊字符时,此方法效果很好。
但是,当涉及到隔空盗取密码时,什么才是真正安全的?
我想看到一个禁用选项。我知道当我在开会时,我不希望我的密码在投影仪上显示出来,让所有人都看到。
除此之外,我都很喜欢。
确实是一个很好的观点!
这甚至可以更容易地实现。
使用 jquery
$(the_checkbox_selector).click(function(){
if($(this).is(‘:checked’)){
$(the_password_input).attr(‘type’, ‘text’);
}else{
$(the_password_input).attr(‘type’, ‘password’);
}
});
还没有检查它是否有效,但没看到有什么问题。
澄清一下
默认情况下它将是密码类型,选中后将切换为文本类型。
是的,我更喜欢上面的方式,而不是iPhone风格。
它实际上与苹果在其桌面操作系统上所做的一样。
苹果并没有在其桌面操作系统中使用类似iPhone的密码字段,而是使用了上述方法:标准的密码点,并且通过复选框让用户能够以明文查看密码。
喜欢它 :)
我很高兴你喜欢它 :)
你被投票了!
来自WebDevVote.com的反向链接
Firefox的Unhide Passwords扩展在办公室里非常有用,在那里我不担心有人会偷看我的屏幕(密码以明文显示,直到你离开该字段)。
我不会在我的笔记本电脑上安装该扩展,但类似这样的功能会是一个不错的折衷方案。
我几乎从不输入错误的密码,而且这也不太安全,所以我认为这不是一个好的做法。
很棒的文章。我现在正在使用它。
我昨天想到了这种技术,今天你就发布了教程……谢谢 :)
你这个愚蠢的苹果混蛋!几十年来,所有手机的标准行为都是这样,但你(以及网络上其他像这样的蠢货:http://www.experienceinternet.co.uk/blog/archive/an-alternative-approach-to-password-confirmation/ 或这个:http://www.viget.com/advance/password-fields-are-annoying/)却把它称为“iPhone的方式”。
更不用说你们都是UX wannabes,试图讨好像Jakob Nielsen这样的老顽固,并让他为所有他能够产生的垃圾承担功劳。看看我第二个链接中那个可怜的蠢蛋?他比那个迟钝的Nielsen先生说得更有道理,但没人费心给他记功。这公平吗?
目前,我愿意与你分享的智慧就这么多。我会让你继续你的愚蠢博客,过着你无聊而毫无意义的生活。
也许当你长出自己的大脑,不再遵循一些垂死的化石的想法时,我会回来……
在那之前,这里有一些东西可能会给你一个关于如何在文本开头或中间处理密码编辑的替代想法:http://enhancedpass.ionut-botizan.net/
这哥们说得有道理,但方式有点乱。我旧的诺基亚手机就是这样处理密码的。我相信它运行的是Symbian系统,这意味着这在移动设备上已经是一种相当标准的做法了,因为它是最大的移动操作系统。
老实说,为什么要用这么多脏话?即使你是对的,这也会让你显得非常低俗。
像prafuitu这样的人最好还是忽略。
我有一部诺基亚N800,运行基于Debian的Linux发行版。它会显示密码的最后一个字母大约一秒钟,效果非常好。
我认为开发某种JavaScript解决方案来实现这种功能在桌面浏览器上应该不会太难。我认为密码字段旁边应该有3个选项(这对美观/可用性提出了挑战!)
* 不进行密码掩码
* 部分掩码(最后一个字母在输入后可见n.毫秒)
* 完全掩码(就像今天桌面浏览器默认的行为一样)。
我不同意,像prafuitu这样的人在一周辛苦工作后,当你需要一些东西让你发笑时,是最棒的。
别忘了,粗俗和毫无根据的自负!再加上一些糟糕的语法和笨拙的谴责——以及基本上匿名的帖子——它有一种愚蠢的魅力,你可以称之为“吹牛式的尖酸刻薄”。
@DN
我的朋友,你晚了2天……
我已经向这个博客的读者道歉了,解释说我没想到任何一个理智的人在阅读我的评论后会同意它。显然,我错了!
此外,还提到了我“有限的英语知识”……无论那是什么意思……
其次,你能(如果你足够善良)启发我:为什么我是个白痴?
是因为
a) 我使用的词语?
b) 我糟糕的语法?
c) 尽管有以上所有内容,但我仍然提出一个触及你某些敏感点的观点?
我可以很容易地接受你叫我笨蛋或混蛋,但白痴?我不这么认为! :)
我同意,但来这里的人并不关心这个想法来自哪里。
他们来这里是为了学习编码。
而且他们肯定不会来听你这样的人说话。
我认为这是一个好主意,但在现实中用处不大。
1. 如果JS被关闭,你必须使用一个处于密码模式的输入字段(现在它会以空白显示)。
2. 如果你旁边坐着一个人,他知道你妈妈的名字,并且看到了所有一个接一个的字母
他就知道你的密码了,
因为并非所有用户都会使用像“kg23324#6rg”这样的安全密码。
而且我很少打错字。
不过,这是一个好主意,在手机上很有用,但在互联网上就不行了,我想。
“而且我很少打错字。”
哈哈
好吧,在输入密码时不是这样,但这是一个有趣的拼写错误,我承认。
“not wenn typing” 又来了 :P
嘿,Chris,有没有想过把你的网站名称改为jQuery-Tricks?
只是想想 :)
很酷的想法。虽然我注意到,如果你在第一个例子中输入得太快,字母弹出窗口跟不上(可能是因为动画稍微减慢了速度)。
嗨,Chris,在“提交评论”按钮旁边放一个小闪光框,显示刚刚输入的几个字母,并带有漂亮的淡入效果,会不会很酷?这会给用户一种用打字机打字的感觉。
优秀的链接prafuitu,我非常喜欢这个:http://www.viget.com/advance/password-fields-are-annoying/
有趣。
http://blog.decaf.de/2009/07/iphone-like-password-fields-using-jquery/
绝对天才的想法,我会在我的未来网站中实现它,谢谢。
老实说,我认为这不会让你损失任何利润。大多数电脑用户已经习惯了输入密码,他们甚至不会多想。如果用户输错了密码,我认为他们不会责怪公司/网站。当用户创建帐户时,他们可能甚至不知道此功能可用。我高度怀疑密码字段会影响某人使用服务的决定。
我认为这也需要一个复选框来关闭它。如果你在自己的电脑上,你很可能在浏览器中保存了你的密码。如果你不在自己的电脑上,很可能有人在你旁边,并且可能正在观看你的屏幕,尤其是在你进行演示时。
我的观点是,这在iPhone(和其他移动设备)上有效,但不太适合桌面电脑甚至笔记本电脑。
原因是什么?
它在移动设备上有效,因为它们很小,因此键盘非常靠近屏幕,你可以在输入时轻松看到密码反馈。
当我尝试从我的办公室电脑链接到的演示时,我首先注意到的是,因为我不会盲打,所以输入密码的速度慢了很多。为了利用反馈,我不得不抬头看屏幕,然后低头看键盘。虽然延迟很小,但我还是觉得它会比它想要改进的用户体验更糟糕。
基于我自己的习惯,我怀疑我甚至不会注意到密码字段是否被掩盖。至少在我完全输入完密码并抬头看屏幕之前不会注意到。
我同意——这正是我想说的。在台式电脑上,当我输入密码时,我唯一一次真正看键盘而不是屏幕。密码本质上都是模糊的和不寻常的。
抱歉地说,我发现这更像是一个哗众取宠的花招,而不是一个实用的想法,至少在桌面环境中是这样。
我更喜欢能够切换整个密码的可见性。我写了一个脚本来做到这一点
http://jaron.nl/blog/2009/how-to-unhide-passwords-on-your-site-and-everywhere-else/
它在每个密码字段后添加一个“显示密码”链接,并切换页面上所有密码的可见性状态。我还创建了一个书签和小书签脚本,它们做同样的事情,您可以使用它们在任何网站上查看密码。
不错的教程……虽然第二个演示中应该有一个两三秒的超时……然后它应该变成密码点……
讨厌iPhone上的那个功能,它很笨拙,如果有人想通过偷看获取你的密码,他们无论如何都能得到。我个人觉得它更烦人而不是酷。即使它是一个非常棒的概念,我也可以想象它在某些情况下会起作用。
很酷的效果!出人意料地简单!
我个人的观点是,这些方法违背了密码字段的全部意义。
虽然比普通的文本字段更难,但它们使人们更容易从你的肩膀上看到你的密码。
我可能更喜欢一个切换选项,或者什么都不做。正如上面某人所说,人们习惯了以传统的方式输入密码,并且对此没有问题。
我认为更重要的是提供一种快速、清晰的方法来告诉用户他们输入的密码无效,并要求他们重新输入,提供“忘记密码”功能,并准确地告诉他们做错了什么(而不仅仅是“用户名/密码无效”)。
我必须同意Anthony的观点,在现实生活中,确实有人在周围闲逛,他们会看到你的密码。
那是完全正确的。
这个演示似乎在FF3.5中不起作用。还有其他人遇到这个问题吗?
简单而漂亮的效果!我从未想过使用这样的东西,尽管我知道iPhone使用了它。说实话,我从未将这件事视为可用性问题。我一直把它看作是一个直接的安全问题。不用说,这仍然是一个很酷的附加功能。
首先,我想向所有读者(也许除了Caleb :P)道歉!那条信息不是为他们准备的。它只针对这篇文章的发布者。然而,他决定批准这条评论,尽管我有限的英语知识让我在其中使用了所有粗俗的语言……
@Mark Gibbens
是的,它是……你无法在JavaScript中处理粘贴/复制/剪切事件!……至少,不是以一种一致的、跨浏览器的形式。:| 此外,除了光标位于字符串末尾时,很难处理另一个光标位置的文本编辑。
所有这些只会让你陷入比现在更多的问题,为另一堆错误和问题腾出空间。
如果在浏览器级别实现,像这样的事情会更好。这就是我从未完成那个Firefox插件的原因……顺便说一句,它比这个脚本更高级,处理所有编辑,在任何光标位置,选择和覆盖任意数量的文本,除了剪切和粘贴之外……
不过,它不应该成为标准。
其他人仍然可以很容易地偷看。
我总是会在有人看到我输入密码时隐藏我的iPhone。
这太棒了,谢谢!三个月前这个脚本在哪里?
除非你想失去用户,否则不要使用dPassword插件。事实上,什么都不要用。这是浏览器/操作系统需要担心的!这根本不是我们的问题。
是的,我认为尼尔森在这件事上完全错了。此外,观察你的手指是一种神奇的方法来判断你正在按哪个按钮。(嘿,它有跨浏览器支持,向后兼容,不需要代码库……)每个输入方法都一样,除了类似于,是的,移动设备,它们容易出现错误输入。
不错的演示,它们确实运行得很好。iPhone密码界面的问题在于它是一个个人设备,人们观看你屏幕的机会较小,如果需要,可以很容易地将其隐藏起来,避免他人的窥视。在桌面上使用这种界面会使人们更容易查看你的密码。
对于独自使用电脑的人来说,这可能不是问题。但是,对于在公共场所使用电脑的人,例如零售行业,这个系统会暴露出巨大的漏洞。
我认为答案可能是给用户提供选择,因为这会提高可用性。
你好。很棒的插件!
我创建了另一个类似iPhone的功能:文本输入中的x按钮。查看我的示例
这里:http://vremenno.net/examples/x-button-on-text-input2/
作为用户,我不会很乐意将我的密码展示给任何看到我屏幕的人。因此,我不会建议为我客户的网站实施此功能……
也就是说,这是一个不错的技巧,仅仅是为了好玩^_^
直观且简单。
我不认为有必要改变我们在网络上处理密码的方式。
我们从一开始就一直这样做,而且效果很好。它是安全的,如果你想避免输入错误字符,只需在输入密码时查看键盘即可。事实上,在输入密码时没有必要查看屏幕,因为你只会看到星号、星号、点等。
你不觉得吗?
我也要在这件事上当个扫兴的人了。就像其他人提到的那样,移动设备要小得多,所以在它们上面有效。
在我看来,第一个例子是个灾难!显示的字符非常大,坐在几米外的人都能看到!
我绝对不建议在任何网站/应用程序上实施此功能。
我看不出有什么缺点,我认为它非常简洁,并且非常适合注册流程。也许闪烁版本显示得太大,但它是可定制的!我喜欢……
我阅读了尼尔森关于密码掩码的帖子,发现它非常愚蠢。他提出的解决方案非常荒谬,以至于我不得不写了一篇在我的博客上对这个概念的回应。
然而,这个解决方案从各方面来说都是完美的。从你肩膀上看的人只会看到一个字母而不是整个密码,用户可以确信他们的密码正在以安全的方式处理。下次我编写密码字段时,将实施此解决方案。
非常感谢你。
顺便说一句,这不是iPhone的原创解决方案。Symbian手机已经这样做了很多年了。我记得在我的旧诺基亚6600上看到过它,而且我相信那时它也不是新的。
甚至在那之前——我记得我的第一部手机,在诺基亚使用塞班平台之前,就采用了这种字符遮蔽的方法。
我相信使用电脑的人至少应该对这些东西有一点了解。
所以,在密码等方面感到不安全或缺乏自信不是我们的担忧,这不在我的考虑范围内——它应该是安全的,显示你输入的内容在这种情况下是不好的做法……也许如果用户有一个复选框搜索……但是将其设置为默认值(即使它只显示最后一个字母)——好吧,也许在安全性较低的论坛等内容上,它可以工作:P
我更喜欢在密码字段下方添加一个复选框,标签为“显示密码”。
我认为这仅适用于移动设备,并不是每个人都希望在公共场合显示密码。
只想指出(至少iPhone)密码没有默认延迟或类似设置。当按下按键时,您可以看到明文字母。这使得窥探肩膀的人更难看到,因为输入速度在输入过程中会有所不同,因此之前的字母也会以不同的速度隐藏。
干杯
不太喜欢这样。它看起来确实很漂亮,但我经常发现自己需要在其他人面前输入密码,原因很多(如果与某人一起工作)。我会非常担心他们能够以这种方式看到我的密码。
刚刚与我正在为其进行UI设计的网站讨论了这个问题。我的想法
——手机不是键盘和网络浏览器。使用手机时,您必须非常粗心才能让人看到您的密码。在400英寸的显示器上则不然。
——你不能只考虑这个的安全问题。年轻人会喜欢iPhone的方式,但许多人已经看到他们的密码被屏蔽了十年或更久。他们会感到困惑,甚至担心。不合逻辑?谁在乎……他们是用户。如果您对此表示怀疑,请在某些用户测试中坐下来。
——复选框的想法也是糟糕的UI。这是用户需要做的另一个决定,如果没有很多解释,可能会让他们感到困惑。
——对于第一次输入,使用密码确认字段。这通常只使用一次,所以为什么对一次性使用如此关注。如果用于登录……抱歉,但如果人们不知道他们在输入什么,我怀疑他们是否会记住密码。