前言
這里有一些步驟,我們可以采取以確保我們的 Flutter 應用程序。
Google 在 2020 年透露,自 2018 年發布以來,已經有超過 200 萬開發者使用 flutter,使其成為當今市場上最受歡迎的框架之一。最初,flutter 只能作為 Android 和 iOS 的移動應用開發框架使用,但是現在我們已經發布了 flutter 桌面和 flutter web,這個框架在 flutter 開發者中變得更加流行。
我們主要關心的是編寫代碼和添加新特性,因此我們并不總是專注于確保應用程序中的所有內容都是安全和健壯的。這是因為我們專注于編寫代碼和創建新特性,而不是確保一切都是安全和健壯的。
現在,這可能會導致一個問題,當你把你的應用程序部署后,一切都已經完成和測試,你正在把它投入生產,這可能使應用程序易受攻擊,這可能導致用戶數據泄露,它可能導致你的應用程序業務邏輯暴露,甚至可能導致你的數據,或你的 API 鍵和你的資源被濫用,這反過來可能是非常昂貴的,特別是你正在接觸和使用類似 Firebase 或 AWS。
正文
在本文中,我們可以采取一些步驟來保護我們的 Flutter 應用程序,讓我們看看八個這樣的步驟,您可以采取這些步驟來確保您的下一個 Flutter 應用程序是完全安全和健壯的。
1. Obfuscate code 混淆代碼
https://link.juejin.cn/?target=https%3A%2F%2Fdocs.flutter.dev%2Fdeployment%2Fobfuscate
因此,為了讓 Flutter 應用程序更加安全,我們首先要考慮的是升級代碼。什么是代碼混淆?
模糊處理的基本定義就是讓代碼更難以被逆向工程閱讀所以你要做的就是你可以在 android 中找到任何 apk 文件你可以把它分解成文件這樣你就可以在你知道解壓文件之后再看代碼因為它是開源的 apk 文件可以是你知道的所有文件都被分解成你可以看到 java 文件代碼寫在里面所以模糊處理的方法就是不刪除代碼它不會對代碼做任何事情它只是改變變量的名字和類的名字以及地點之類的所以人類閱讀起來會更加困難。
這是軟件行業中的一個非常通用的術語。這樣做的目的是讓你的應用程序的二進制文件對人類來說更難理解。
您可以對 Flutter 應用程序或 Android 應用程序進行反向工程,以便它在應用程序中生成并提供函數名、類名和字符串等信息。因為它暴露了許多不同的細節,所以也暴露了您的 API 鍵。
如果逆向工程管理不當,或者類和函數名暴露了業務邏輯,那么它就提供了一種防范措施。
2. background snapshots 后臺快照
為了繼續執行第二步,操作系統會在應用程序在后臺時獲取一個快照,因此在應用程序在后臺時保存較大的狀態。
所以當你的應用程序被最小化時你知道滾動進入其他應用程序你所站的最后一個屏幕的快照和最小化版本一起出現所以你可以看到如何保護它們像這樣你可以看到屏幕爆炸如何保護它們假設你有一些卡的細節在這里然后你最小化你的應用程序然后有人在你最小化的應用程序中滾動然后你可以看到卡的細節和類似的東西所以你如何保護它所以有兩個簡單的三行代碼你可以放入本地安卓和本地 iOS 來阻止這個。
例如,時鐘應用程序和日歷應用程序都有快照,因此相應地,我們為它們都提供了快照,所以這是一個很好的特性,但是如果您有任何私有信息,那么這就不是一個理想的特性。
最好的例子就是谷歌支付,所以如果你打開這個應用,開始輸入你的銀行賬戶信息或者轉賬給某人,然后你在后臺打開這個應用,然后你看到屏幕變成了白色,這是隱藏這個應用的標簽的內容。
通過這種方式,如果我們的應用程序中有一些不想在后臺顯示的敏感信息,我們可以繼續并實現一個特定的插件。
3. Stay up-to-date 更新程序
因此,無論何時啟動一個新的 Flutter 應用程序,記住第三點非常重要。更新的版本應該是您的起點。
讓你的 Flutter SDK、插件和軟件包保持最新是保護你的應用程序最簡單和最好的方法之一。當 Flutter 框架發現安全漏洞時,Google 會發布補丁和安全修復程序。
找出任何尚未歸檔到 Google Flutter 存儲庫中的未解決問題,并報告它們。
4. Flushing in-memory cache 刷新內存緩存
如果您正在構建一些非常關鍵和非常安全的應用程序,比如銀行應用程序,那么您應該盡可能頻繁地刷新內存緩存。在任何移動開發技術中,flutter 都是存儲來自后端或數據庫的內容的最安全的方式,這就是為什么它在內存中是最安全的方式。
這是因為它是在運行時生成的,并存儲在一個運行時變量中,當應用程序被關閉時該變量將被清除,因此它不會存儲在任何地方。它被提取到一個運行時并存儲在一個運行時變量中。
數據或令牌或類似的東西應該存儲在內存中,在您的應用程序中使用的變量。
或者,如果您想添加一個額外的安全層,您可以使用這個小代碼,您可以看到現在在這里刷新您的內存后一段時間。例如,如果我正在使用一個銀行應用程序,我的應用程序到后臺,我正在使用另一個應用程序。
因為該應用程序在后臺運行了 15 分鐘或 20 分鐘,它可能會受到其他應用程序或腳本讀取您的內存變量。
靜止兩三分鐘后,你就可以清空內存緩存了,這段代碼會告訴你應用何時暫停,你只需要檢查 15 分鐘,然后清空它。
5. local authentication 本地認證
與此相關的下一件事通常是本地身份驗證。當快照實現到位時,通常希望在再次打開快照時讓用戶再次進行本地身份驗證。
本地認證,我指的是生物指標,面部識別,或類似的東西,所以如果你看看 what-app,你可以添加一個指紋鎖,這樣我們就可以為我們的應用做類似的事情。
每當應用程序從后臺返回或第一次打開時,我們都會在本地對用戶進行身份驗證,以確保它們是有效的,因此對于擁有支付信息或知道敏感信息(如社交媒體信息)的用戶來說,這也非常有用。
您無法獲取那些受操作系統限制的簽名,因為這是身份盜竊,而且操作系統也不允許您這樣做。當你檢查指紋時,操作系統只告訴你指紋是真還是假。這是你唯一的收獲。
6. Secure Storage 安全儲存
https://link.juejin.cn/?target=https%3A%2F%2Fpub.dev%2Fpackages%2Fflutter_secure_storage
接下來是安全存儲,因此如果您使用的是共享首選項或 sqlite 數據庫,那么您需要的插件名為 sqflite。
因此,共享首選項成為應用程序的一部分,即使在刪除數據之后,它也能保持數據的持久性。你不應該在你的共享首選項中存儲普通密碼或別針,因為它們可以被其他應用程序通過代碼讀取,也可以被用戶自己清除,所以你不應該在你的共享首選項中存儲直平面密碼或別針。
即使您希望存儲對您和您的共享首選項至關重要的內容,也應該在存儲它之前使用加密和加密。
即使你知道你被利用了,你的共享偏好也不會受到影響,所以你可以保留一些東西,比如主題數據或者從后端獲取用戶數據的令牌,或者告訴你應用是否是第一次安裝的令牌,或者類似的東西。這是你想要保留的東西,以確保應用程序的持久性。
我們需要確保我們的數據是安全和加密的,所以我們可以使用 flutter 安全存儲,這是一個插件,使用安卓系統的密鑰鏈和 AES 加密。因此,我們要確保本地存儲的數據也是加密和安全的,這是增加 android 應用程序安全性的另一種方法。你可以選擇這個插件
7. Restrict network traffic 限制網絡流量
因此,第七點是限制網絡流量,網絡流量控制提供互聯網連接障礙,無論是自己的服務器或第三方供應商。為了在移動應用程序和服務器之間提供安全連接,信息通常通過傳輸安全層(T.L.S)交換。
最受信任的網絡
為了將網絡流量或連接限制到不安全的端點,可以顯式地將域列入白名單。
- 安卓系統:
res/xml/network_security_config.xml
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
<domain-config>
<domain includeSubdomains="true">yourDomain.com</domain>
<trust-anchors>
<certificates src="@raw/my_ca"/>
</trust-anchors>
</domain-config>
</network-security-config>
- IOS:
ios/Info.plist
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<false/>
<key>NSExceptionDomains</key>
<dict>
<key>cocoacasts.com</key>
<dict>
<key>NSIncludesSubdomains</key>
<true/>
<key>NSExceptionAllowsInsecureHTTPLoads</key>
<true/>
</dict>
</dict>
</dict>
8. jail-breaking protection 越獄保護
最后但同樣重要的是,我們有越獄保護。為了定義“越獄”這個術語,它實際上是一個與 iOS 系統相關的術語。在越獄過程中,你可以根植你的 iOS 設備,這樣你就可以實際訪問,你知道,撤銷,甚至篡改,任何蘋果強加的限制。
對于 Android 來說,當你知道如何改變你的設備時,你實際上進入了開發者模式,這樣你就可以安裝第三方應用程序或者做各種各樣的改變。盡管有時候這種狀態是有用的,但它并不總是惡意的,因此無論何時使用設備,它都會處于這種狀態。
您的應用程序或其數據可能會受到一些惡意軟件引入設備的影響。如果你想,你可以檢查這樣的惡意軟件。
在這種情況下,您可以檢測設備的狀態并采取適當的操作。例如,如果您的應用程序中有路由要限制破解監獄或根設備,則可以限制它們。
這個世界上沒有安全可言。如果我今天創建一個應用程序,它可能是安全的今天,但在兩天,三天,或一年后,它可能不是安全的。
換句話說,我可以創建一個今天安全的應用程序,但明天可能就不安全了,所以不存在 100% 安全的應用程序。
因此,下面是使您的應用程序更加安全和健壯的八個步驟。不可能保證您的應用程序總是萬無一失的,但是添加這八個步驟肯定會增加您的機會。
結束語
如果本文對你有幫助,請轉發讓更多的朋友閱讀。
也許這個操作只要你 3 秒鐘,對我來說是一個激勵,感謝。
祝你有一個美好的一天~