指紋識別,自打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端請求短信驗證碼,則本地清空該帳號的指紋開啓信息;
這是因爲一旦應用向服務端校驗登陸信息且正確時,服務端會校驗該帳號上次登陸設備是否一致,若不一致則要求應用端請求短信驗證碼,所以一旦應用端請求驗證碼,就說明帳號登陸設備有變,也就能保證指紋開啓信息只會留存一臺設備了。
碼完收工,很久不接觸這種安全性功能設計,思惟邏輯愈發有些線性考慮,與諸君共勉。