做一个产品,注册登录是必需的,但是你是否考虑过账户安全呢? 最近一直在做账户安全的需求,但在调研时发现,资料很少。于是只好边做边总结。在互联网产品中,账户是最最基本的功能,太常见了,常见到被我们忽略。我们理所当然觉得,做一个产品,注册登录是必需的,可能很少会去想,为什么要有一个账户?账户的作用到底是什么?我们用户的账户够安全么? 账户,有必要么? 每次用个产品(网站、桌面客户端、APP、后台系统等)还要先注册、填写表单、登录,真麻烦,能省去这个步骤么?如果你用的产品是个免费的工具,其实是没什么问题的,因为每个人使用的都是相同的本地功能,且彼此之间毫无瓜葛。 但假设,这个工具有高级的付费功能,情况就不一样了。我们需要让服务端知道,哪些人是免费用户,哪些人是付费用户,并向付费用户收费,然后开放高级权限。为了让服务端知道谁是谁,谁有什么特征,谁能干什么,谁不能干什么,于是有了账户的概念。 在互联网的世界中,一个个账户就好像一座座房子,注册就是建房子,账号是门牌号,密码是锁,登录就是开门。 在付费类的工具产品中,免费用户可能只打得开一两间房子,而对于付费用户,他们能解锁这座房子的所有房间。 在即时通信类产品中,房子存储了你的个人资料,聊天记录,以及关系链。别人想获得进入你房子参观、与你交谈的权利,需要事先征得你的同意。 在网游中,房子就是你,你就是房子。人民币玩家可能手一挥买下一套大豪宅,而你仍在为小户型的装修费通宵刷副本。 从功能性的角度来看,账户是用户权限的标识,存储用户信息的空间,甚至是用户的代表。而从技术性的角度看,账户就是以userID为主键的一大串数据表记录 好了,进入正题,花费这么多步骤,辛辛苦苦建好的房子,防盗工作如何开展? 验证开门的你是谁? 有时候找到门牌号来开门的人很多,鱼龙混杂,而我们只准主人进入房子。那么问题来了,如何验证你是房子的主人?方式有很多: 密码:能用钥匙打开门的就是主人 验证码:增设一道门,并给出一把临时的钥匙,能用临时钥匙开门的就是主人 手势密码:能用手比划出规定动作,就是主人 密保问题、购买记录:记得问题的答案,或者主人曾经的所作所为,就是真正的主人 身份证号、银行卡信息:能说出身份证号或银行卡信息,就是真正的主人 指纹识别、声纹识别或刷脸识别:指纹、声纹或脸型匹配的话,就是真正的主人 无论采用哪种方式,验证信息都需要在建房子的时候就做进去,不然,你拿什么来验证? 对于最后一种方式,由于每个人的指纹、声纹与脸型都是独一无二的,而且几乎无法复制…可以说安全性相当高。但由于技术限制等原因,目前大多数产品仍采用前几种方式,或前几种方式的组合,来保护账户。 如何保护账户安全? 1、阻止异常登录 增加密码复杂度: 注册设置密码,至少6位,英文+数字组合,英文必须有大小写,等等。钥匙的棱棱角角多了,自然很难复制,不容易被盗取。 登录频次限制: 短时间内登录失败次数达到一定量,再次登录,则增设方式2,通过填写图片验证码或短信验证码,防止账号密码被暴力验证。 短时间内登录失败次数达到安全阀值时(如密码错误5次),则对账户予以暂时冻结,冻结期结束再开放登录操作。如下图所示: 登录设备更换限制: 账户与设备号绑定。每次登录检测与账户绑定的设备号,如果是一台新的设备,则增设一道验证方式。如下图所示: 登录IP变更限制: 每次登录检测IP地址,如果检测到新的IP地址,则增设一道验证方式。 2、知会用户 检测到异常登录情况时,通过APP全局弹窗、短信、push或邮件等方式知会用户,并提示接下来的步骤,一般都会提示用户重置密码,更新密保信息等。如下图所示: 有人可能担心,一道道的安全验证,会不会影响到操作上的体验? 在账户安全的问题上,绝不能因为所谓的操作流畅性就降低安全标准。尤其是对于账户安全要求很高的产品,宁可让用户多做几步验证,最大程度地确保验证的准确性。 在交互上,用户会存在操作负担与认知负担,减少认知负担的优先级理应高于减少操作负担。如果因为减少操作负担,造成了账户安全问题,极大地增加了用户的认知负担,是非常得不偿失的行为。