APP安全機制(十二)—— 密碼工具:提高用戶安全性和體驗(二)

版本記錄

版本號 時間
V1.0 2018.12.01 星期六

前言

在這個信息爆炸的年代,特別是一些敏感的行業(yè),比如金融業(yè)和銀行卡相關(guān)等等,這都對app的安全機制有更高的需求,很多大公司都有安全 部門,用于檢測自己產(chǎn)品的安全性,但是及時是這樣,安全問題仍然被不斷曝出,接下來幾篇我們主要說一下app的安全機制。感興趣的看我上面幾篇。
1. APP安全機制(一)—— 幾種和安全性有關(guān)的情況
2. APP安全機制(二)—— 使用Reveal查看任意APP的UI
3. APP安全機制(三)—— Base64加密
4. APP安全機制(四)—— MD5加密
5. APP安全機制(五)—— 對稱加密
6. APP安全機制(六)—— 非對稱加密
7. APP安全機制(七)—— SHA加密
8. APP安全機制(八)—— 偏好設(shè)置的加密存儲
9. APP安全機制(九)—— 基本iOS安全之鑰匙鏈和哈希(一)
10. APP安全機制(十)—— 基本iOS安全之鑰匙鏈和哈希(二)
11. APP安全機制(十一)—— 密碼工具:提高用戶安全性和體驗(一)

Completing the Two-Way Association - 完成雙方的關(guān)聯(lián)

好吧,現(xiàn)在,是時候配置您的iOS應(yīng)用程序來識別您的網(wǎng)站,從而完成雙向關(guān)聯(lián)。 在繼續(xù)之前,請在瀏覽器的位置欄中記下您的Heroku app domain,稍后您將需要它。

在Xcode中打開UltraMotivator,在左側(cè)Project導(dǎo)航器的頂部選擇目標(biāo),然后單擊General選項卡。

Identity部分中,將Bundle Identifier設(shè)置為您的App ID。 在Signing部分,選中Automatically manage signing,然后選擇與應(yīng)用程序關(guān)聯(lián)的Team:Xcode現(xiàn)在應(yīng)生成配置文件和簽名證書。 您的General頁面上的任何錯誤現(xiàn)在都應(yīng)該消失。

在頁面底部,將AuthenticationServices.framework添加到Linked Frameworks and Libraries。 您需要AuthenticationServices來集成iOS密碼自動填充功能。

接下來,單擊Capabilities選項卡。 找到Associated Domains的選項并將其設(shè)置為ON以激活此功能。

現(xiàn)在,單擊+,然后使用以下格式將Heroku應(yīng)用程序的域添加到列表中:

webcredentials:[your domain]

假設(shè)您已正確設(shè)置App ID’s capabilities,請在列出的域下方顯示帶有復(fù)選標(biāo)記的標(biāo)簽。 這些復(fù)選標(biāo)記表示您已將相關(guān)的域功能添加到您的entitlement fileapp ID。

您現(xiàn)在應(yīng)該能夠在左側(cè)的Project navigator中看到UltraMotivator.entitlements。 此entitlements file包含您剛輸入的數(shù)據(jù),包含在屬性列表中。

iOS使用此Entitlements File來檢查您的code-signing identityprovisioning profile。

返回Target ? Capabilities,找到Autofill Credential Provider,并將其切換為ON。

再次出現(xiàn)復(fù)選標(biāo)記 - 這次,確認您已將自動填充憑據(jù)提供程序功能添加到App IDentitlements file.中。 它還確認您已包含AuthenticationServices.framework。


Putting It All Together

現(xiàn)在是時候把所有東西都連接起來了。

返回Xcode中的UltraMotivator.xcodeproj,打開API.swift并在第46行找到以下代碼:

static let baseURL = URL(string: "https://[your domain]")

“[your domain]”替換為您之前復(fù)制和使用的Heroku應(yīng)用程序名稱。

注意:使用Heroku時,您的域名可能會遵循[your app name].herokuapp.com。

API.swift包含能夠與您域中的服務(wù)器應(yīng)用程序通信的API調(diào)用。 這些調(diào)用有助于執(zhí)行用戶登錄,注冊,注銷,密碼更改和隨機激勵生成。 大多數(shù)這些調(diào)用已經(jīng)集成到iOS應(yīng)用程序中。 現(xiàn)在您已添加了域,身份驗證應(yīng)按預(yù)期工作。

接下來,您將在Interface Builder中添加iOS密碼自動填充,強密碼生成和安全代碼自動填充。 打開Main.storyboard即可開始使用。

Login view controller上選擇Username field。 在右側(cè)Inspector窗格中打開Attributes inspector選項卡。 找到Text Input Traits部分,并將Content Type設(shè)置為Username。

現(xiàn)在,選擇Password field并將其Content Type設(shè)置為Password

同樣,在Signup view controller上,將Username field’s Content Type更改為Username。 然后,將New Password fieldContent Type更改為New Password,以便此字段現(xiàn)在將自動填充強密碼建議。

最后,打開OneTimeCodeViewController.swift。 在第42行插入以下內(nèi)容:

oneTimeCodeField.textContentType = .oneTimeCode

通過將textContentType設(shè)置為.oneTimeCode,每當(dāng)iOS在用戶正在查看此雙因素身份驗證屏幕時檢測到傳入郵件中的安全代碼時,鍵盤上方的QuickType欄將自動填充代碼。 然后,用戶只需點擊一下即可輸入此代碼,而無需離開應(yīng)用程序。


Customizing iOS Password AutoFill Rules - 自定義iOS密碼自動填充規(guī)則

在進行最后的步驟之前,您需要最后快速繞道以了解iOS密碼自動填充規(guī)則。

Apple的默認密碼長度為20個字符,并且必須包含以下所有字符類型:大寫,小寫,數(shù)字和連字符。 這會生成一個與大多數(shù)Web服務(wù)兼容的強密碼。

但是,在某些情況下,您可能需要或想要為建議的iOS密碼設(shè)置自定義規(guī)則。 您可以將這些自定義規(guī)則添加到Content Type設(shè)置為New Password的任何字段的Password Rule屬性中。

iOS密碼自動填充規(guī)則需要以下格式:

required: (<identifier> | <character-class>), ..., (<identifier> | <character-class>); 
allowed: (<identifier> | <character-class>), ..., (<identifier> | <character-class>); 
max-consecutive: <non-negative-integer>

他們使用以下關(guān)鍵字:

  • required:如果生成的密碼必須至少包含指定字符類的一個成員,請使用“required”。要組合字符類,請用逗號分隔它們。例如,required:X,Y等于required:[XY],其中X和Y表示字符類。
  • allowed:如果限制指定允許字符的子集,則使用“allowed”。如果您不包含allowed屬性,并且只包含required,則密碼只能包含所需的字符。如果您只指定allowed而不是required,則密碼只能包含您明確允許的字符。如果您既未指定requiredallowed,則您的密碼可以包含任何ASCII可打印字符。
  • max-consecutive:使用正整數(shù)跟隨“max-consecutive”以限制字符連續(xù)出現(xiàn)的次數(shù)。
  • minlength:使用帶有正整數(shù)的“minlength”關(guān)鍵字指定最小密碼長度。
  • maxlength:使用帶有正整數(shù)的“maxlength”關(guān)鍵字來指定最大密碼長度。

您必須使用“allowed”“required”以及這些允許的字符類:

  • upper:表示大寫字母A - Z
  • lower:表示小寫字母a - z。
  • digit:表示數(shù)字0 - 9。
  • special:包括- ().&@?'#,/“+和空格。
  • ascii-printable:包含所有ASCII字符。
  • unicode:包含所有unicode字符。
  • 或者通過列出要包含在方括號中的ASCII字符來指定自定義字符類。例如,“ allowed:[a1, - ]”允許字符“a”,“1”,“,”“ - ”。

A Super Fun Happy Quiz? Oh, Boy!!

認為你得到了要點? 請嘗試以下練習(xí)。 對于每個密碼規(guī)則,確定密碼自動填充是否可以生成A,B,C和/或D。每個答案可能包含以下所有多項選項:

1. required: upper, digit; maxlength: 5; max-consecutive: 1;
A. JEMSP
B. 43jKL
C. 39LS2
D. 92JJK

Password rule #1 can generate passwords A and C.

2. required: lower; required: digit, [$#@]; allowed: upper; minlength: 9; max-consecutive: 2;
A. jsoeebd1re
B. Ys2jUJaaauREV
C. js13&Lk2ja
D. 29mn$#ki@nd

Password rule #2 can generate passwords A and D.

3. required: lower, special; required: digit, upper; allowed: unicode;
A. I??U
B. aJEK24
C. 30 ?????3420
D. 3 0 4 2

Password rule #3 can generate passwords B, C and D.

恭喜你完成這項運動! 據(jù)說,根據(jù)Apple的說法:

The more restrictions you have on a password, the higher the likelihood that it can be guessed. The hardest-to-guess password rule is allowed: unicode. No password rule at all creates the second most-difficult-to-guess passwords.

您對密碼的限制越多,猜測的可能性就越高。 允許使用最難猜測的密碼規(guī)則:unicode。 沒有密碼規(guī)則會創(chuàng)建第二個最難猜測的密碼。

那么請記住那些經(jīng)過精心分析的復(fù)雜密碼規(guī)則嗎? 作為一般規(guī)則,你通常希望盡可能避免它們!


Putting Custom Password Rules to Use

每當(dāng)您與后端Web服務(wù)集成時,您可能需要使用iOS密碼規(guī)則來同步服務(wù)可能強加的任何特定密碼要求。

為了測試,想象一下你的網(wǎng)絡(luò)后端:

  • 1) 不接受特殊字符。
  • 2) 需要至少12個字符長。
  • 3) 需要大寫字符。

要滿足這些要求,請打開Main.storyboard,在Signup View Controller Scene中選擇New Password字段,然后將此密碼規(guī)則復(fù)制并粘貼到New Password FieldPassword Rule的field中:

required: upper;
allowed: lower, digit;
minlength: 12; 
maxlength: 20;
max-consecutive: 3;

此規(guī)則至少需要一個大寫字符;它還允許使用小寫字符和數(shù)字;它生成一個12到20個字符長的密碼,它可以防止任何字符連續(xù)出現(xiàn)三次以上。

當(dāng)您繼續(xù)實施自己的iOS密碼自動填充規(guī)則時,您可以通過將其輸入Apple’s Password Rules Validation Tool來確認它們是否按預(yù)期工作。在那里,您可以查看幾百甚至一萬個生成的密碼,以確保您的規(guī)則產(chǎn)生您需要的結(jié)果。


Taking It for a Spin

您現(xiàn)在已經(jīng)設(shè)置了身份驗證,強密碼自動填充,安全代碼自動填充和自定義iOS密碼規(guī)則。構(gòu)建并運行您的iOS應(yīng)用程序以在物理iOS設(shè)備上測試所有內(nèi)容 - iOS密碼自動填充功能無法在模擬器上運行。

點擊登錄頁面右下角的Sign Up以導(dǎo)航到注冊視圖。

用戶名字Field的Keyboard Type“E-mail Address”,因此,雖然用戶名字段是第一個響應(yīng)者,但·QuickType·欄可能會建議您用于登錄其他服務(wù)的電子郵件地址。這是因為iOS將此特定用戶名字Field識別為注冊用戶名字Field。

輸入用戶名后,選擇Password field。它應(yīng)該使用符合您在field’s Password Rule中指定的規(guī)則的強密碼自動填充。點擊Use Strong Password以使用自動填充提供的建議,然后點擊Sign Up。如果您已成功注冊,將彈出一條警告以通知您。

如果您看到上述alert,恭喜! 您已注冊一個新帳戶。 點擊OK,注冊視圖將自動關(guān)閉以返回登錄視圖。


Saving Your Passwords

最后一個難題是:自動保存新創(chuàng)建的憑據(jù)。 事實證明,要讓iOS識別出需要保存一組新憑據(jù),您必須:

  • 1) 在注冊發(fā)生后,從View層次結(jié)構(gòu)中刪除Username and Password fields。
  • 2) 僅在Username and Password fields不再位于“視圖”層次結(jié)構(gòu)中后清除它們。

由于您的應(yīng)用完全取消了注冊視圖而未刪除任何fields,因此它已滿足這些要求。 很好! 但是,如何防止您的鑰匙串保存失敗或不完整登錄嘗試的憑據(jù)? 好問題!

打開SignupViewController.swift,向下滾動到viewWillDisappear(_ :)并找到此代碼片段:

if API.token == nil {
  usernameField.text = nil
  passwordField.text = nil
} else {
  API.logout()
}

這是代碼的作用:

當(dāng)用戶成功注冊時,服務(wù)器返回一個token。 UltraMotivatorAPI.swift類將它存儲在變量API.token中。

如果用戶導(dǎo)航回登錄視圖時API.token為nil,則注冊操作未完成。 在這種情況下,您在離開View層次結(jié)構(gòu)之前將text field設(shè)置為nil,即在viewWillDisappear(_ :)中。 這可以防止將這些無效憑據(jù)保存到用戶的鑰匙串中。

如果API.token不是nil,則注冊操作已成功完成。 在這種情況下,您log out,保持fields的文本不變。 然后,iOS會自動將這些憑據(jù)保存到用戶的鑰匙串中。


Checking Under the Hood

要確認您的iOS密碼規(guī)則是否有效,請在iOS設(shè)備(而非模擬器)上運行該應(yīng)用,然后使用幾個不同的用戶名進行注冊。 在Mac上打開Keychain Access。 選擇登login鑰鏈,Passwords類別,然后搜索您的Web應(yīng)用程序域的登錄密碼。

要查看與列出的用戶名關(guān)聯(lián)的任何密碼,請選擇該密碼,然后點擊show password復(fù)選框。 出現(xiàn)提示時輸入您的鑰匙串/計算機密碼,密碼應(yīng)該出現(xiàn)。

根據(jù)我的鑰匙串,我的用戶名的相應(yīng)密碼是“rehnep0xasravezpUg”“Qyddehziwzek2syhda”“Qyddehziwzek2syhda.”所有這三個都符合為應(yīng)用程序定義的自定義密碼規(guī)則。

要確認憑據(jù)何時不保存,請輸入用戶名和密碼,但不注冊即按“返回”按鈕。 再次檢查Keychain Access的登錄密碼以確認iOS未將這些無效憑證保存到鑰匙串。

一旦您對您的憑據(jù)按預(yù)期保存感到滿意,請返回到您的iOS設(shè)備并嘗試登錄該應(yīng)用。 開始輸入您的用戶名。 您的用戶名應(yīng)自動顯示在QuickType欄中,或者在您點擊右側(cè)的鍵符號后顯示。 選擇您的用戶名,并在出現(xiàn)提示時使用Touch ID,Face IDdevice passcode驗證您的鑰匙串訪問權(quán)限。 您的iOS密碼和用戶名將相應(yīng)地自動填充。

提交這些憑據(jù),您現(xiàn)在應(yīng)該看到一個兩步驗證屏幕:

由于未在后端設(shè)置兩步驗證,因此不要等待代碼自動通過:您必須手動測試此功能。

要確定文本消息是否包含安全代碼,iOS會使用代碼字符串掃描傳入文本中的 “code” or “passcode”等字詞。 因此,要測試此功能,請保持Ultra Motivator打開并通過Apple的桌面Messages應(yīng)用程序自行發(fā)送文本。 給自己發(fā)一個代碼:“Your code is 1234.”。然后,QuickType欄會向你顯示在代碼字段中自動填充“1234”的選項。

注意:iOS可以識別所有支持的iOS語言中與“code” or “passcode”等效的單詞。

點按Submit以顯示Motivational view controller。


Password Ninja Enlightenment Attained!

祝賀你! 你是一個真正的忍者密碼戰(zhàn)士。

花點時間深入了解隨機動機,然后在iOS設(shè)備上打開Safari。 通過在以下網(wǎng)址中將“[your domain]”替換為您的實際域,導(dǎo)航到您的登錄網(wǎng)頁:

https://[domain name]/login

點擊Username field后,您的網(wǎng)頁應(yīng)顯示您在iOS應(yīng)用中注冊時保存的相同憑據(jù)。

同樣,如果您通過Safarihttps://[domain name]/register注冊創(chuàng)建一個新帳戶并返回iOS應(yīng)用程序進行登錄,則這些憑據(jù)應(yīng)自動填充。

這是很多工作,但你已經(jīng)為你的努力取得了很多成就。 您現(xiàn)在已經(jīng)實現(xiàn)了iOS密碼自動填充,生成和同步。 您的應(yīng)用程序的登錄操作現(xiàn)在是安全的,易于使用并直接與您的網(wǎng)站集成關(guān)聯(lián)!

查看WWDC 2017’s Introducing Password AutoFill for Apps videoWWDC 2018’s Automatic Strong Passwords and Security Code AutoFill video,以更廣泛地了解您剛剛實現(xiàn)的功能。

后記

本篇講述了提高用戶安全性和體驗,感興趣的給個贊或者關(guān)注~~~

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,702評論 6 534
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 98,615評論 3 419
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事?!?“怎么了?”我有些...
    開封第一講書人閱讀 176,606評論 0 376
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,044評論 1 314
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 71,826評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 55,227評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,307評論 3 442
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 42,447評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 48,992評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 40,807評論 3 355
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,001評論 1 370
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,550評論 5 361
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 44,243評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,667評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,930評論 1 287
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,709評論 3 393
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 47,996評論 2 374

推薦閱讀更多精彩內(nèi)容