企业级服务产品,产品安全是用户选择时的关键因素,在登录安全,密码安全,设备安全等三个方面都要做到周全且极致。 多设备同时登录并不是不安全 目前市面上多数产品都是单设备登录的,即一台手机终端+一台电脑终端,当使用其他设备登录同一帐号时,需要将其他设备登出,保证同一帐号同一时间仅可在一台设备登录;用惯微信QQ的用户有时会与我反馈,说这样使用起来产品多安全,只能一个设备登录,你的产品采用同样的策略,用户也不会有所不爽。 但实际上,即使产品支持多设备登录,也非不安全,在使用上,既满足了工作场景下的多设备的方便使用,在帐号安全上其实并没有形成相对的劣势。只是在产品设计上,要更多的考虑很多功能设置项的全局统一性,对于服务端统一处理、终端与服务端请求的即时性和弱网下的请求处理的即时性要求并相对较高,因为用户不会管你是不是本地操作还是服务端操作,他们要的是一样的体验。 设备授权一定要操作简单且流程闭环 多设备登录,需要对设备授权登录及设备管理进行闭环设计,比较常用的授权方式为短信验证码授权,也可以做设备之间的快速授权,但由于目前苹果推出新规定,IOS设备的deviseID已不唯一,因此设备之间已无法用deviseID做唯一设备标记,因此短信验证码为更平稳的做法,也是比较安全的做法。 单设备登录提升安全性,也可以做设备登录授权。 设备管理中的授权记录,授权取消可操作,及登录日志的记录是闭环流程的方式 密码安全要结合登录框架设计,双管齐下 技术角度上来看,要尽量少的将密码暴露在登录过程中,即像网页端输入帐号密码的形式可以考虑在整个登录框架中进行弱化处理,对这种形式的登录方式也要尽量做好双因子校验,即密码校验+手机号校验。 保证设备安全基础之上,尽量通过设备授权其他端,比如网页端或者桌面端去进行登录,比较典型的列子是微信。 密码修改有两种流程设计方式: 验证手机号后直接修改密码(手机号验证越来越常用,也相对安全) 验证旧密码,设置新密码(这种比较老套了) 关于密码的强度设计,不同安全等级会有不同设计 关于密码的强度设计,不同安全等级会有不同设计,可以在服务端配置一套规则,随时根据反馈和数据调整,不需要跟随发版。 下面是我在设计整套密码规则时在网上搜来的相对详尽的打分规则,大家可以参考: 密码长度: 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位及以上重复数字字母 -20 分: 字母、数字和符号 5 分: 大小写字母、数字和符号 最后的评分标准: >= 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端跳转至重置密码页面 希望服务端可给出补充提示 "不可包含5个及以上重复数字或字母" "不可包含5个及以上连续数字" "你设置的密码太简单了,为了企业信息安全,请重新设置" 对于企业级服务,扩展场景设计补充:管理员可设置安全等级 不同企业对于安全等级要求不同,管理员能力也参差不齐,因此在产品设计上会纠结,是不是为用户想多了,是不是过度设计,一时陷入这个度的考虑纠结中,可以考虑将这些强度和规则整合成几个等级的安全等级选择,把这个选择权还给企业本身,如是管理员可开启是否强制用户扫码登录,管理员可以强制用户将个人密码全部设置为强度极强的密码。 登录续期如何设计 对于手机终端用户是无感知票据续期这件事的,升级也多为覆盖升级,用户通常使用体验为一直打开app就可以用,没有提示过重新登录或直接踢出。 对于终端基本都是无限续期的处理,网页端则不尽相同,有7天票据过期,也有5天票据过期,最好的方式是进行登录频度的记录和计算,按照用户使用频率,按照一定规律为其在网页端登录续期,尽量少的将用户直接踢出。 另外,特殊身份,比如企业管理员可每次登录都需要验证身份,票据也可以设计的短一些;还可以根据用户IP等计算用户的常用地点,常用地点+-5公里等规则可以作为用户是否异常登录的依据,也可以因为用户一直在常用地点登录作为自动续期的依据。 登录过程的安全提醒不可缺少 即使在设备授权的基础之上,也要补齐对于其他设备尝试登录的异常提醒,其他设备异常登录的提醒等。 以下都属于异常登录: 密码多次尝试登录失败 设备尝试获取授权失败 不再常用地点登录 今天先说这么多,谢谢大家!