今年 5 月,谷歌在 I/O 大會上宣佈,Kotlin 編程語言成爲其 Android 應用程序開發人員的首選語言。數據庫
Kotlin 是一種面向現代多平臺應用程序的編程語言,成爲谷歌開發 Android 應用程序的首選語言後,許多開發人員逐漸地從 Java 轉向 Kotlin。根據最新的一項調查顯示,有 62% 的開發人員使用 Kotlin 來構建移動應用程序,另有 41% 的開發人員使用 Kotlin 來構建 Web 後端項目。 編程
而隨着 Kotlin 的出現,愈來愈多的知名組織越發重視移動應用程序的安全性。最近由 DHS 與 NIST 聯合的一項關於移動設備安全研究發現,應用程序中的漏洞一般是沒有遵循安全編碼引發,這些漏洞會對用戶的數據形成某種危害。後端
對於使用 Kotlin 開發人員來講,熟悉這門語言並瞭解移動應用程序的安全編碼是很是重要的。如下是在使用 Kotlin 時遇到的一些常見漏洞: 不安全數據存儲 Android 生態系統爲應用程序提供了幾種存儲數據的方法。開發人員使用的存儲類型取決於幾點:存儲的數據類型、數據的使用以及數據是否應該保持私有或與其餘應用程序共享。 而常見的編碼錯誤是以明文存儲敏感信息。例如,常常在應用程序使用的 「Shared Preference」 或數據庫查找 API 密碼、密碼和 PII(Personally Identifiable Information),因爲攻擊者可以訪問應用程序的數據庫(根設備、應用程序的備份等),從而檢索使用該應用的其餘用戶的憑據,這類疏忽愈來愈多地致使重要數據丟失。 安全
不安全通訊 目前,大多數移動應用程序在某種程度上以 client-server 的方式交換數據,當進行通訊時,用戶數據就會在移動運營商網絡、或者某些 WiFi 網絡和互聯網之間進行傳輸。正是這個過程,攻擊者就能利用其中的某個弱環節發起攻擊。若是數據傳輸沒有使用 SSL/TLS 加密,則攻擊者不只可以監視以明文傳輸的通訊數據,並且還可以竊取交換的數據並執行中間人攻擊。 爲了防止不安全的通訊,必須始終把網絡層認爲是不安全的,並不斷確保移動程序和後端服務器之間的全部通訊都是加密的。服務器
不安全認證網絡
移動設備中的輸入機制,例如 4-PIN 碼或者基於 TouchID 等特性的身份驗證,都會致使移動應用程序的身份驗證不安全且容易遭受攻擊。 除非有功能需求,不然移動應用程序不須要對其進行實時身份驗證的後端服務器。即便存在這樣的後端服務器,用戶一般也不須要在任什麼時候候都處於聯機狀態。這給移動應用的身份驗證帶來了巨大的挑戰,每當在本機進行身份驗證時,就能夠經過運行時操做或修改二進制文件來繞過已越獄設備上的身份驗證。 不安全的身份驗證不單單是猜出密碼、默認用戶賬戶或破壞數據。有時,能夠繞過身份驗證機制,系統沒法識別用戶並記錄其(惡意)行爲。 編程語言
代碼篡改 編碼
所謂的代碼篡改指的是:在設備上下載一個應用程序後,該應用的代碼和數據是存於該設備的。因爲大多數應用程序是公共的,這致使攻擊能夠進行修改代碼、操做內存內容、更改或替換系統 API 或者修改應用程序的數據和資源。 爲了防止代碼篡改,重要的是移動應用程序可以在運行時檢測到代碼已被添加或更改。開發團隊應該作出相應的行動,向服務器報告代碼衝突或者執行關機。 加密
魔高一尺,道高一丈。技術老是不斷髮展,將來仍會暴露出新的應用程序安全性漏洞,經過警戒一些編碼錯誤,開發人員能夠構建更安全的 Android 應用,避免掉入陷阱。 利用技術老是在不斷髮展;將來可能會基於可能暴露新的應用程序篡改點的依賴關係發現新的漏洞。經過了解這些編碼錯誤,開發人員能夠構建更安全的 Android 應用程序,並躲開可能致使這些狀況的陷阱。orm