To B 产品的登录安全 http://www.woshipm.com/pd/638833.html

企业级产品的产品安全体现在登录安全,密码安全,设备安全三个方面。

多设备同时登录并不是不安全

市面上多数产品都是单设备登录的,即一台手机终端+一台电脑终端,当使用设备登录同一帐号时,需要将其他设备登出,保证同一帐号同一时间仅可在一台设备登录。(互踢)
实际上,即使产品支持多设备登录,也并非不安全,在使用上,既满足了工作场景下的多设备使用,在帐号安全上其实并没有形成相对的劣势。只是在产品设计上,要更多的考虑功能设置项的全局统一性,对于服务端统一处理、终端与服务端请求的即时性和弱网下的请求处理的即时性要求相对较高,因为用户不会管你是本地操作还是服务端操作,他们要的是一样的体验。

设备授权一定要操作简单且流程闭环

多设备登录,需要对设备授权登录及设备管理进行闭环设计,比较常用的授权方式为短信验证码授权,也可以做设备之间的快速授权,但由于目前iOS设备的deviseID已不唯一,因此设备之间已无法用deviseID做唯一设备标记,因此短信验证码为更稳妥的做法。
单设备登录提升安全性,也可以做设备登录授权。
设备管理中的授权记录,授权取消可操作,及登录日志的记录是闭环流程的方式。

密码安全要结合登录框架设计,双管齐下

技术角度上,要尽量少的将密码暴露在登录过程中,即像网页端输入帐号密码的形式可以考虑在整个登录框架中进行弱化处理,对这种形式的登录方式也要尽量做好双因子校验,即密码校验+手机号校验。
保证设备安全基础之上,尽量通过设备授权其他端,比如网页端或者桌面端去进行登录,比较典型的例子是微信。
密码修改有两种流程设计方式:
1. 验证手机号后直接修改密码(手机号验证越来越常用,也相对安全)
2. 验证旧密码,设置新密码(这种比较老套了)

登录续期如何设计

对于手机终端用户,升级多为覆盖升级,用户通常使用体验为一打开app就可以用,没有提示过重新登录或直接踢出。
对于终端基本都是无限续期的处理,网页端则不尽相同,有7天票据过期,也有5天票据过期,最好的方式是进行登录频度的记录和计算,按照用户使用频率,按照一定规律为其在网页端登录续期,尽量少的将用户直接踢出。
另外,特殊身份,比如企业管理员可每次登录都需要验证身份,票据可以设计的短一些;还可以根据用户IP等计算用户的常用地点,常用地点±5公里等规则可以作为是否异常登录的依据,也可以因为用户一直在常用地点登录作为自动续期的依据。

对于企业级服务,扩展场景设计补充:管理员可设置安全等级

不同企业对安全等级要求不同,管理员能力也参差不齐,因此在产品设计上会纠结,是不是为用户想多了,是不是过度设计,一时陷入纠结中,可以考虑将这些强度和规则整合成几个等级的安全等级选择,把这个选择权还给企业本身,管理员可开启是否强制用户扫码登录,管理员可以强制用户将个人密码全部设置为强度极强的密码。

登录过程的安全提醒不可缺少

即使在设备授权的基础之上,也要补齐对于其他设备尝试登录的异常提醒,其他设备异常登录的提醒等。
以下属于异常登录:

  • 密码多次尝试登录失败
  • 设备尝试获取授权失败
  • 不在常用地点登录

注册/登录的小技巧

1.“登录时勾选记住密码”的时代已经过去,应该帮助成功登录的用户记住密码,每次进入都自动登录,主动点击退出时再帮助用户清空密码;手机端一般都有身份有效期的设定,所以用户正常使用或者覆盖安装升级都不会退出登录。
2.弱化注册过程,让用户通过手机短信验证的方式直接登录,自动帮用户创建帐号,让用户快速使用。这种方式最简单,也容易增强用户的记忆,谁会忘记自己的手机号呢(需要考虑换新手机号的场景),基于手机号去拓展个人帐号、资料维护、安全保障、密码管理等,产品设计的理念还是简化逻辑和交互,让用户更清晰的知道你想让他做什么,以及看到页面后如何快速完成;还有一种方式是游客模式(随便看看模式),进入app后可随意浏览影片影院信息等不涉及帐号判定的功能,用户真正想要使用时再进行快捷的帐号注册和登录,能更好的增量用户。
3.网页端登录
(1)网页端扫码功能可做手机授权功能,比较常见的例子是微信客户端的直接点击手机授权登录的方式,该方式不止适合客户端类产品,网页端也适用,尤其对于企业级应用来讲。
(2)为安全考虑,网页端登录可以做双因子校验,即通过检测常用登录地点(IP库和IP位置解析是个技术活)或长时间未登录的检测,可做帐号密码登录后的手机号校验,保证帐号安全,同样适用于企业级应用,个人应用没必要做的这样麻烦。
(3)最理想的方式还是利用授权或者其他安全认证的方式,确保手机端的帐号密码安全,利用手机端去完成网页端及客户端的登录,简单高效。

密码强度设计

关于密码的强度设计,不同安全等级会有不同设计,可以在服务端配置一套规则,随时根据反馈和数据调整,不需要跟随发版。
下面是一套相对详尽的打分规则,大家可以参考:

密码长度: ● 0 分: 小于等于 6 个字符 ● 10 分: 6 到 10 字符 ● 25 分: 大于等于 10 个字符 字母: ● 0 分: 没有字母 ● 10 分: 全都是小(大)写字母 ● 20 分: 大小写混合字母 数字: ● 0 分: 没有数字 ● 10 分: 1 个数字或数字连续 ● 20 分: 大于等于 3 个数字 符号: ● 0 分: 没有符号 ● 10 分: 1 个符号 ● 25 分: 大于 1 个符号 奖励: ● 0 分: 字母和数字 ● 2 分: 字母、数字和符号 ● 5 分: 大小写字母、数字和符号 减分: ● -10 分: 3位及以上连续数字字母或3位及以上重复数字字母 评分标准: ● >= 90: 非常安全 ● >= 80: 安全(Secure) ● >= 70: 非常强 ● >= 60: 强(Strong) ● >= 50: 一般(Average) ● >= 25: 弱(Weak) ● >= 0: 非常弱

基于打分标准启发,以下是我整理设计的密码规则,重点加入了弱密码的校验和提醒,以及密码强度检测,大部分对密码安全有要求的需求,以下规则可基本满足:

| 灵活化密码规则
排除掉简单密码:123456a 123qwe 123abc 111aaa
常规密码标准:6到20位字母和数字的组合 密码强度达到一般即符合标准 弱密码标准下 30及以上
中等密码标准:6到20位字母和数字的组合 密码强度需达到强
50分及以上
强密码标准:6到20位字母和数字的组合 密码强度需达到非常强 **70分及以上

| 密码规则
基本规则:6到20位字母和数字的组合
增加弱密码库:密码库基础
在以上基础上,密码强度检测:一般-强-非常强(调整文案思考:能降低用户绞尽脑汁设置密码的心理压力,并能给用户所设置密码点信心,不出现弱字眼,弱密码就不让用户成功设置)
【一般】密码标准:基础密码规则即为一般密码
【强】密码标准: 大小写混合字母 或 包含符号 或 密码长度大于12个字符
【非常强】密码标准:大小写混合字母 且 包含符号

| 提示文案
密码设置提示文案:
用户设置的密码为弱密码库中密码,则提示“您设置的密码太过常用,极易被破解,请更换设置”,不允许提交
强度检测提示文案:
一般:大小写混合字母或加入符号可提高密码强度
强:大小写混合字母或加入符号可提高密码强度
非常强:密码已很安全,请牢记

| 弱密码库(维护在服务端,可随时扩展)
123qwe,qwe123,1234qwer,qwer1234,abc123,123abc,abcd1234,1234abcd,password,qq123456,123456qq,123456a,a123456,123qweasd,qweasd123,1q2w3e4r,q1w2e3r4,1q2w3e4r5t,q1w2e3r4t5

有些需求下,并不需要打分机制那么复杂的设计,以下是简化版:
| 基础规则:
6-20位字母和数字的组合
| 补充条款:
不可以包含5个及以上重复数字/字母
不可以包含5个及以上连续数字(正序/倒序)
| 不能是以下10个常用密码:
Top 10 most used password :
123qwe,1234qwer,abc123,abcd1234,password,qq123456,123qweasd,1q2w3e4r,q1w2e3r4,1q2w3e4r5t

服务端扩展规则后,用户再次登录时触发判断,终端web端跳转至重置密码页面,希望服务端可给出补充提示
1. “不可包含5个及以上重复数字或字母”
2. “不可包含5个及以上连续数字”
3. “你设置的密码太简单了,为了企业信息安全,请重新设置”