指紋識別,自打iPhone5s出來後就普遍在使用的功能,大家可能都已經習以爲常,但是當我真正要上這個功能的時候,反而遇到了一堆問題,裏面隱藏的邏輯最終用了兩個版本才完善。
首先說明下這個需求的背景,公司內部APP增加了查看薪資的功能,但是考慮到隱私安全,就添加了隱私密碼和指紋密碼的功能。
初期的需求如下:
隱私密碼爲6-10位大小寫字母、數字、特殊符號的任意組合,不要求如何組合;隱私密碼不可與APP登錄密碼相同;(後來由於無接口提供,取消了校驗)設置指紋密碼前必須設置隱私密碼;開啓指紋密碼先輸入隱私密碼,再驗證指紋;關閉指紋密碼不需要驗證;
上面羅列的只是幾個要點,需求肯定不是這麼簡單幾句話寫完的,但是上述邏輯無法覆蓋以下場景:
場景一:
員工手機沒有錄入指紋的時候怎麼處理?
因此需求中增加了:
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端請求短信驗證碼,則本地清空該賬號的指紋開啓信息;
這是由於一旦應用向服務端校驗登錄信息且正確時,服務端會校驗該賬號上次登錄設備是否一致,若不一致則要求應用端請求短信驗證碼,因此一旦應用端請求驗證碼,就說明賬號登錄設備有變,也就能保證指紋開啓信息只會留存一臺設備了。