我注意到在许多网站上,当他们要求提供一次性密码(OTP)(通常通过 SMS 发送)时,输入的隐藏方式与密码字段相同。
我的理解是,一旦使用了 OTP,它就不再有任何用处。
隐藏这些字段的输入是否有正当理由?
我注意到在许多网站上,当他们要求提供一次性密码(OTP)(通常通过 SMS 发送)时,输入的隐藏方式与密码字段相同。
我的理解是,一旦使用了 OTP,它就不再有任何用处。
隐藏这些字段的输入是否有正当理由?
除了传统的用户名/密码组合之外,我的回答是基于一次性密码被用作第二个因素的假设。如果不是这种情况,并且一次性密码是唯一因素,那么Gilles 的答案肯定更适用。
很可能是由于Cargo Cult Programming,这意味着盲目地遵循在其他地方观察到的模式,而不了解它们背后的真正含义。
开发者可能会在“一次性密码”中看到“密码”并愉快地制作它<input type="password">
。毕竟,这就是它的目的,对吧?
安全方面,没有。将一次性密码泄露给第三方(例如通过肩部冲浪)没有那么大的问题,因为密码在使用一次或一段时间后失效。
唯一可以想象的缺点是用户体验较差,因为用户可能无法确保他们输入的内容实际上与他们收到的密码匹配。
隐藏密码的原因是为了防止偷窥:在场的人(或通过摄像头观察的人)可能能够读取屏幕上的密码。这也是一次性密码的风险,但程度要小得多,原因有两个:一次性密码仅在短时间内有效,并且无论如何都会显示在 OTP 设备上。但这仍然是一个风险。根据 OTP 的类型,它可能会在几分钟内保持有效(如果它是基于时间的并且服务器不防止重放)或直到合法用户完成输入(如果它是基于序列或服务器防止重放)。通常,OTP 设备的屏幕比用户输入 OTP 的计算机更不容易被肩部冲浪者看到。
将字段声明为密码除了隐藏数据之外还有其他作用:它可能会阻止复制到剪贴板,并可能导致应用程序不在表单输入历史记录中记录 OTP。这些都没有任何安全优势,但从条目历史记录中省略 OTP 具有可用性优势:它避免给用户留下 OTP 是以后有效输入的印象。
这些都是非常薄弱的理由。主要原因是表单设计者看到输入是某种密码,因此将其声明为密码。
猜测其他开发人员的动机可能是浪费时间,但我可以看到一个未被提及的优势。
从心理上讲,让它看起来像密码有助于人们将其与安全性联系起来。它将我们几十年来一直在推送的“你不会告诉别人你的密码”的信息传递给 OTP,并希望能帮助更多的用户在 Bob Hackerman 打电话要求他们确认他刚刚发送的六位数代码时停下来提问他们。用户通常是系统中最薄弱的部分,因此这似乎是一个合理的投资场所。
从技术上讲,有一些缺点(比如存储它的浏览器),使用 OTP 的专用 HTML 字段会更好。即使我们有一个,将它作为默认 UX 点缀也是完全合理的。
隐藏字段输入的原因可能是由于编程模式(如@MechMK1 所述),因为开发人员不会为提供的每种身份验证类型编写单独的字段,因此他们重用了密码类型的字段。不这样做可能会导致代码膨胀。