指纹识别,自打iPhone5s出来后就广泛在使用的功能,你们可能都已经习觉得常,可是当我真正要上这个功能的时候,反而遇到了一堆问题,里面隐藏的逻辑最终用了两个版本才完善。安全
首先说明下这个需求的背景,公司内部APP增长了查看薪资的功能,可是考虑到隐私安全,就添加了隐私密码和指纹密码的功能。测试
初期的需求以下:设计
1.隐私密码为6-10位大小写字母、数字、特殊符号的任意组合,不要求如何组合;
2.隐私密码不可与APP登陆密码相同;(后来因为无接口提供,取消了校验) ;
3.设置指纹密码前必须设置隐私密码;
4.开启指纹密码先输入隐私密码,再验证指纹;
5.关闭指纹密码不须要验证;接口
上面罗列的只是几个要点,需求确定不是这么简单几句话写完的,可是上述逻辑没法覆盖如下场景:验证码
场景一:
员工手机没有录入指纹的时候怎么处理?登录
所以需求中增长了:请求
6.开启指纹先校验手机是否已经设置了指纹;密码
至此就完成了指纹密码的正向流程,是否是感受能够交给研发了?然而不经意听到交互在旁边说到一句:手机借给别人……经验
这里备注下,咱们公司APP有手机绑定的功能,发现帐号登陆设备变动后会要求输入手机验证码换绑设备。客户端
因此就出现了下面的场景:
场景二:
员工X有A手机,员工Y有B手机;
X在A手机完成了帐号登陆和指纹密码开启,这时Y借用A手机登陆了本身帐号,那么Y的帐号指纹密码状态是什么?
之因此会出现这样问题,是由于指纹是否开启的信息是留存在手机本地的,所以刚刚X在A手机开启指纹后,Y再用A手机登陆,会沿用上个帐号的指纹开启状态,这显然是不合理的,所以需求中增长了:
7.指纹是否开启的信息,留存本地时须要关联工号保存;
总算交付研发了,我也投到下个需求中去了,然而次日交互和我说,她和研发商量了下,把开启指纹密码时的校验隐私密码去除了,我问为何,她说由于用户的手机,他要在本身手机开启指纹,既然已经验证指纹正确了,说明他就是手机主人,那为何还要验证隐私密码?因而我和她描述了下面的场景:
场景三:
员工X有A手机,员工Y有B手机;
X用了A手机登陆帐号,随后换用B手机登陆帐号,可是后来忘记退出,且没有在本身设备回登;
那么Y拿回B手机后,若是没有隐私密码校验,将能够直接能够开启指纹密码,查看隐私信息;
这时交互表示无奈,并和研发说了撤销刚刚的修改。其实若是不用隐私密码二次校验,还会存在个漏洞:
场景四:
员工X有A手机,员工Y有B手机;
X和Y是同事,常常借手机,X所以知道B手机的锁屏密码,那么X就可能干出下面的事;
借到B手机,因为有锁屏密码,所以能够添加本身的指纹,而后直接开启客户端的指纹密码,查看隐私信息;
因为这时候已经提测,因此第一期上线就没有将隐私密码二次校验加回去,毕竟是内部APP,发布比较方便,然而逻辑的推演又出来了:
场景五:
员工X有A手机,员工Y有B手机;
X和Y是同事,常常借手机,X所以知道B手机的锁屏密码,那么X又干了一件事;
Y已经在B手机开启了指纹密码,X借到B手机后,经过锁屏密码在B手机中添加了本身的指纹,因而又能嘿嘿嘿……
这种逻辑是在转测后想起来的,就计划放在下期完善,当天晚上测试也提说有这么个漏洞,我说已经放到二期了,因此说靠谱的测试仍是很重要的,那么这种状况怎么解决?
这里分开讨论,iOS端的应用通常是检测指纹管理是否变动,包括指纹的增删,一旦指纹管理有变动,当用户打开应用时,即便开启了指纹解锁,也须要先输入隐私密码;安卓多是开放程度比较好,像“掌上生活”APP是直接校验当时开启指纹解锁的指纹ID,也就是说你用中指打开应用的指纹解锁,是没法用食指解锁的,这样安全性很高,可是成本有点高;
为此咱们也就加上需求:
8.当用户使用应用内的指纹密码时,若检测到手机指纹管理变动,则直接要求输入隐私密码,校验正确后直接进入功能页,且二次使用不受影响;P.S. 安卓端还须要开会时沟通下是否是也能检测到指纹管理变动
正当我被本身的逻辑折服时,研发又来打脸了,哎哟,好疼……
场景六:
员工X有A手机,员工Y有B手机;
X在A、B手机都登陆过本身帐号,且都开启了指纹密码;
某天Y借了X的帐号在B手机登陆,抑或是同事关系致使Y知道X的登陆密码; 因而乎Y在B手机上登陆了X的帐号,因为以前X的帐号在B手机开启过指纹密码,那么这一次Y能够直接用指纹在B手机解锁X的隐私信息;
敷完药膏,脸总算不疼了,因而就和研发讨论如何保证同一帐号的指纹开启只能保留在一台设备上,是的,咱们又加需求了:
9.当用户登陆应用时,若APP端请求短信验证码,则本地清空该帐号的指纹开启信息;
这是因为一旦应用向服务端校验登陆信息且正确时,服务端会校验该帐号上次登陆设备是否一致,若不一致则要求应用端请求短信验证码,所以一旦应用端请求验证码,就说明帐号登陆设备有变,也就能保证指纹开启信息只会留存一台设备了。
码完收工,很久不接触这种安全性功能设计,思惟逻辑愈发有些线性考虑,与诸君共勉。