“无效的用户名或密码”:这种设计真的糟透了

摘要: 如果登陆时输错了用户名(通常是邮箱)或者密码,大部分系统会弹出这么一句话:Invalid Username or Password(无效的用户名或密码)。系统不会告诉你究竟是哪一个输错了,因为他们是特

如果登陆时输错了用户名(通常是邮箱)或者密码,大部分系统会弹出这么一句话:Invalid Username or Password(无效的用户名或密码)。系统不会告诉你究竟是哪一个输错了,因为他们是特意被设计成这样的,就像下面这些例子:

这样做的原因,是出于安全性,如果有人恶意尝试破解,试错时具体告诉他们密码错了就意味着邮箱是对的(账户存在),无形中为他们排除了一个选项。

遗憾的是,这种设计显然低估了人们的智商。

99.9%的网站只允许一个邮箱注册一个账号,所以如果你真的想知道某个账户存不存在,只要试着用相同的邮箱再注册一遍就可以了,如果注册失败了,就说明用户名是对的。

也就是说,“无效的用户名或密码”这句话的设计根本达不到预想的安全防御目的。这样的设计不仅没有安全价值,更重要的是,它把普通用户登陆时的用户体验搞得很糟糕。

用户登陆输错用户名或密码导致系统报错,这时系统如果不回给用户一个准确的反馈信息,既不告诉你是用户名出错,还是密码出错,对用户来说完全无益于改正输入错误,是一个非常糟糕的体验。

“无效的用户名或密码”这个设计,不能说是安全性和用户体验之间的一种权衡,因为它本身不存在安全性的优点。

真正在安全性和用户体验之间做出的权衡设计应该是这样的:你可以保留登陆系统里的“无效的用户名或密码”这种防试错方式,但是当用户尝试用邮箱注册时,系统应该往邮箱里发送一封可以直接完成剩余注册过程的邮件,这样除了真正拥有该邮箱的用户,其他人都无法知道这个邮箱是否注册过账户。

如今为了登陆安全,越来越多的网站开始使用其他设计方法:比如使用动态条形码技术的双重验证;与LastPass或者1Password等第三方密码管理软件的结合;与iPhone手机Touch ID的指纹识别技术结合;甚至是直接舍弃密码的无密码登陆系统等。

但现在太多的网站还保留着“无效的用户名或密码”这种蹩脚的设计。

这其实是一个非常小的细节,但背后的设计逻辑是很有问题的。这反映出网站系统的设计就应该是要多方位配合的,像这种预防试错的登陆系统,如果没有注册系统的配合就是形同虚设,白白拉低用户体验而已。

前twilio的API工程师KEVIN BURKE在一篇文章里提出了这个问题,我认为还是很有启发的,欢迎感兴趣的同学发邮件和我讨论:suxiaoqiang#36kr.com。

时间: 2024-12-23 11:57:34

“无效的用户名或密码”:这种设计真的糟透了的相关文章

按照视频集成了一个小程序,登录界面和聊天界面。但登录输入用户名和密码后点登录没有反应??

问题描述 我是完全按照视频上做的,但点击登录按钮没反应.logcat出现了这些提示,求大神帮助:07-17 17:17:51.470    1762-1762/com.easemob.chatdemo1.app D/EMChatManager﹕ emchat manager login in process:176207-17 17:17:51.502    1762-1762/com.easemob.chatdemo1.app D/EMDBManager﹕ initDB : asd07-17

iis-IIS发布网站提示输入用户名和密码或者无权限访问

问题描述 IIS发布网站提示输入用户名和密码或者无权限访问 windows server 2003服务器 IIS已经发布过的几个网站没问题,能正常访问,但是发布新网站就出问题 在网站-属性-目录安全性选中"集成windows身份验证",访问时提示输入用户名和密码,不选中则提示: "您未被授权查看该页 您不具备使用所提供的凭据查看该目录或页的权限. 请尝试以下操作: 如果您认为自己应该能够查看该目录或页面,请与网站管理员联系. 单击刷新按钮,并使用其他凭据重试. HTTP 错误

java-在Android中写一个浏览器,加载一个登录页面如何获取用户名和密码框

问题描述 在Android中写一个浏览器,加载一个登录页面如何获取用户名和密码框 在Android中写一个浏览器,记住密码功能怎么写?大神,请指教. 解决方案 webview加载你的登录页面,登录完了后取cookie或其他认证信息(这个和你登录的网站是如何设计的有关) 解决方案二: 用webview 啊 解决方案三: 用sharedpreference来保存密码或者是账号 解决方案四: 这两个输入框是浏览器的还是网页的?

Android——用户登陆及用户名和密码的保存

目录 一.Android下的Junit测试 二.登陆记录密码界面设计 三.采用rom保存用户数据 一.Android下的Junit测试 在实际开发中,开发android软件的过程需要不断地进行测试.而使用Junit测试框架,侧是正规Android开发的必用技术,在Junit中可以得到组件,可以模拟发送事件和检测程序处理的正确性. 首先建立一个新的Android项目,这里我命名为:junit,然后编写AndroidManifest.xml文件,在里面添加uses-library和instrumen

Ajax无刷新验证用户名、密码和邮箱等输入信息

首先来看主程序代码(reg.html):  代码如下 复制代码 <div id="reg">         请输入用户名:<input id="usrname" value="请输入用户名" onfocus="regInit();regKey()"   onblur="regInit()" onkeyup="regKey()"/> </div> &l

曲晓东现场介绍被泄密的淘宝用户名及密码

昨日,360副总裁曲晓东现场介绍被泄密的淘宝用户名及密码.搜狗公司CEO 王小川 在反驳360公司对搜狗浏览器的指责. 搜狗和360这对昔日恋人,如今反目成仇.11月5日,有网友爆料搜狗浏览器泄露用户隐私信息.搜狗随后否认,认为是竞争对手恶意攻击.昨天360召集媒体出示证据,称搜狗"说谎".搜狗昨天亦召集媒体表示,360抹黑搜狗,炮制史上最恶劣造谣事件. 双方公示各自证据 11月5日,有网友爆料称搜狗浏览器存在重大漏洞,使用QQ账号登录搜狗浏览器,可以查看到数千其他用户的个人账号,包括

asp.net (C#)登陆用户名和密码验证,用dr.Read()方法会出现大小写不区分!!(例如:我注册了大写账号,用小写账号也可以登陆).求各位大神帮我解答

问题描述 asp.net(C#)登陆用户名和密码验证,用dr.Read()方法会出现大小写不区分!!(例如:我注册了大写账号,用小写账号也可以登陆).求各位大神帮我解答!! 解决方案 解决方案二:你的代码贴出来解决方案三:SQLServer数据库??如果是,那应该不是asp.net(C#)的原因,是数据库的原因,SQLServer不区分大小写.解决方案四:谁知道你是什么方法做的验证呀解决方案五:mssql可以配置是否区分大小写,这不是c#的问题解决方案六:这里只用dr.Read()方法验证判断了

JS开发字典探测用户名或密码工具

js 用javascript开发字典探测用户名或密码工具 文章作者:翟振凯 (小琦)作者网站:http://www.xiaoqi.net 作者论坛:http://www.tdqy.comQQ:     22336848 53353866 实例演示打包下载 授人予鱼,不如授人予渔.本文注重讲述作者的开发思路与程序的实现方法,目地是让大家了解一个程序的开发过程和这个程序功能的实现原理,而不仅仅是给大家提供一个这样的工具.希望看过本文后的朋友会有所收获,能和我共同分享用javascript编写程序的乐

帮助用户解决登录困难:忘记密码和找回密码的设计

文章描述:注册那点事之--忘记密码?还是找回密码? 上次我们聊到了关于用户来到你的网站,如何让用户心甘情愿注册,以及如何在注册中为用户设置与产品定位相符的注册填写项.今天我们来聊一个看似平淡无奇而事实上和每个用户账号息息相关的问题:用户无法登录自己的账号时该怎么办? 用户无法登录自己的账号,看到产品界面上硕大的红色"用户名或密码错误"之类的提示自然是心急如焚.好在当前涉及用户账号的产品都有完备的账号安全机制,无论用户的用户名忘了,还是不记得密码了,都提供了完善的应急机制.虽然看起来各个