Swift iOS App 開發技巧:如何防止用戶螢幕截圖和錄製


本篇原文(標題:How to Make iOS App Secure From Screenshot and Recording?)刊登於作者 Medium,由 Shashank Thakur 所著,並授權翻譯及轉載。

現在是手機時代,所有東西都有手機 App。從理髮店到大型零售商,每一項業務都有自己的 App,以便更貼近顧客。雖然這真的很方便,但在使用這些 App 的同時,也存在著暴露大量機密信息的風險,這個問題在處理付款及其他敏感信息時,就變得更加重要。作為這些 App 的開發人員,我們有責任進行檢查,以確保 App 不會造成隱私和安全性問題。其中一種解決方法,就是檢測/防止螢幕截圖和螢幕錄製的動作,並直接採取動作、或通知使用者採取適當的動作。

範例

以下是螢幕截圖和螢幕錄製可能會洩露的敏感信息:

1. 可能會記錄登入資料

針對任何需要登入才能訪問敏感信息的 App,我們都需要確保只有已登記的人才能登入。如果登入時允許螢幕截圖和螢幕錄製,就有可能會洩露機密信息。

2. 錄製串流內容

讓我們以一個串流內容 App Netflix 為例,相信大家都知道什麼是 Netflix,我們會在 App 上按月訂閱串流的內容。如果 App 允許進行螢幕錄製,使用者就可以使用設備的錄製功能,錄製 App 的內容,日後即使不再訂閱 App 都可以觀看內容。

3. 付款資料

針對任何處理付款/交易的零售或銀行 App,從安全角度來看,我們需要注意從 App 上可以取得的任何信息,以保護使用者的帳戶。如果我們不謹慎處理,就可能會導致 App 上的資料洩漏,保密交易細節也可能會被入侵。

實作方法

1. 如何禁止螢幕截圖

開發者很簡單就可以禁止/檢測螢幕截圖的動作,就是監聽 iOS 11 以上版本可用的 userDidTakeScreenshotNotification 通知。讓我們來看看實作的方法:

class ViewController: UIViewController {

override func viewDidLoad() {

super.viewDidLoad()

// Do any additional setup after loading the view.

NotificationCenter.default.addObserver(self, selector: #selector(didTakeScreenshot(notification:)), name: UIApplication.userDidTakeScreenshotNotification, object: nil)

}

@objc func didTakeScreenshot(notification:Notification) -> Void {

print("Screen Shot Taken")

}

}

在以上的程式碼中,我們把自己添加為 userDidTakeScreenshotNotification 通知的觀察者 (observer),並捕獲 didTakeScreenShot 函數。每次使用者嘗試進行螢幕截圖時,就會觸發 didTakeScreenShot 函數。此時,開發者就可以按自己所想的方法來處理,例如我們可以顯示一個警告訊息,通知使用者後強制退出 App。你可以看看以下範例:

secure-ios-app-1

2. 如何禁止螢幕錄製

我們可以在 UIScreen 檢查是否有 isCaptured 屬性,來檢測螢幕有沒有被截圖/錄製。讓我們來看看以下的範例程式碼:

func isRecording() ->Bool {

for screen in UIScreen.screens {

if (screen.isCaptured) {

print("screen is recorded")

return true

}

}

return false

}

我們也可以按需要呼叫 isRecording 方法,來檢測螢幕是否有被錄製。我們可以在視圖生命週期的不同階段呼叫這個方法,或是設一個計時器,來定期檢測是否有螢幕錄製行為。以下是檢測螢幕錄製的範例:

secure-ios-app-2

總結

從 App 的安全和隱私角度來看,檢測螢幕截圖和錄製是非常有用的。這可以為擁有數百萬潛在使用者的 App 增加信任和可靠程度。希望你也可以在留言分享你的用例,以及使用過的螢幕截圖方法。

本篇原文(標題:How to Make iOS App Secure From Screenshot and Recording?)刊登於作者 Medium,由 Shashank Thakur 所著,並授權翻譯及轉載。

作者簡介:Shashank 是 Clover Inr. 是首席手機工程師。在此之前,他為 Disney 開發購物 App。他有在 8 年軟件工程經驗,期間為不同的初創公司和大型上司公司開發手機 App 和網頁。你可以通過 Twitter @swiftbyshanks 聯絡他。

譯者簡介:Kelly Chan-AppCoda 編輯小姐。


此文章為客座或轉載文章,由作者授權刊登,AppCoda編輯團隊編輯。有關文章詳情,請參考文首或文末的簡介。

blog comments powered by Disqus
Shares
Share This