iT邦幫忙

2024 iThome 鐵人賽

DAY 19
1
Mobile Development

用最接近自然語言的Basic30天學會行動App系列 第 19

Basic30天學會行動App-第19章.安全性與資料保護

  • 分享至 

  • xImage
  •  

第19章: 安全性與資料保護

在行動應用程式的開發過程中,安全性與資料保護是至關重要的課題。隨著數位化進程的加速,保護用戶的個人資訊和應用程式的敏感資料不僅是技術需求,更是法律和道德的責任。本章將介紹如何在 B4A 應用程式中實現資料加密、安全地存儲敏感資訊,並應對常見的安全威脅。

用戶資料加密

加密是保護資料的一個核心技術手段,通過將明文轉換為不可讀的密文,來確保即使資料被攔截,也無法被非法讀取。B4A 支援使用 AES(Advanced Encryption Standard)等標準加密算法來保護用戶資料。

  1. 使用 AES 加密資料
    AES 是一種常見且安全的對稱加密算法,適用於加密存儲在本地的資料或在網路傳輸中的資料。
Sub EncryptData(plainText As String, key As String) As String
    Dim cipher As Cipher
    cipher.Initialize("AES/CBC/PKCS5Padding")
    Dim encrypted() As Byte = cipher.Encrypt(plainText.GetBytes("UTF8"), key.GetBytes("UTF8"))
    Return BytesToString(encrypted, 0, encrypted.Length, "UTF8")
End Sub

Sub DecryptData(encryptedText As String, key As String) As String
    Dim cipher As Cipher
    cipher.Initialize("AES/CBC/PKCS5Padding")
    Dim decrypted() As Byte = cipher.Decrypt(encryptedText.GetBytes("UTF8"), key.GetBytes("UTF8"))
    Return BytesToString(decrypted, 0, decrypted.Length, "UTF8")
End Sub

在這段程式碼中,我們定義了兩個方法 EncryptData 和 DecryptData,分別用於加密和解密資料。key 是加密密鑰,應該被安全存儲並僅限於授權用戶使用。

安全地存儲敏感資訊

在行動應用程式中,常常需要存儲敏感資訊,如用戶密碼、支付資訊等。這些資料不應該以明文形式存儲在設備上,而應使用加密技術來保護。

  1. 使用 SharedPreferences 安全存儲資料
    SharedPreferences 是 Android 中常用的資料存儲方式,用於存儲應用程式的配置參數或用戶設置。對於敏感資料,可以先加密再存儲。
Sub SaveEncryptedPreference(key As String, value As String)
    Dim encryptedValue As String = EncryptData(value, "YourSecretKey")
    Dim prefs As SharedPreferences
    prefs.Initialize("MyPrefs")
    prefs.PutString(key, encryptedValue)
End Sub

Sub GetDecryptedPreference(key As String) As String
    Dim prefs As SharedPreferences
    prefs.Initialize("MyPrefs")
    Dim encryptedValue As String = prefs.GetString(key, "")
    Return DecryptData(encryptedValue, "YourSecretKey")
End Sub

這段程式碼展示了如何將加密後的敏感資訊存儲在 SharedPreferences 中,並在需要時解密取回。
2. 使用 SQLite 加密資料庫
對於需要存儲大量結構化資料的應用程式,可以使用 SQLite 資料庫。B4A 支援將 SQLite 資料庫進行加密,以保護其中的敏感資訊。

Sub InitializeEncryptedDatabase
    Dim sql As SQL
    sql.InitializeEncrypted(File.DirInternal, "encrypted.db", True, "YourSecretKey")
End Sub

這段程式碼展示了如何初始化一個加密的 SQLite 資料庫,並將密鑰應用於資料庫中。確保密鑰的保密性是保護資料安全的關鍵。

應對常見的安全威脅

行動應用程式開發中常見的安全威脅包括 SQL 注入、跨站請求偽造(CSRF)、跨站腳本攻擊(XSS)、以及設備丟失導致的資料洩露。本節將簡要介紹如何應對這些威脅。

  1. 防止 SQL 注入
    SQL 注入攻擊是黑客利用未經處理的使用者輸入來構造惡意的 SQL 查詢,從而訪問或破壞資料庫。使用參數化查詢可以有效防止這類攻擊。
Sub GetUserData(userId As String) As Cursor
    Dim sql As SQL
    sql.Initialize(File.DirInternal, "app.db", True)
    Dim cursor As Cursor = sql.ExecQuery2("SELECT * FROM users WHERE id = ?", Array As String(userId))
    Return cursor
End Sub

這段程式碼通過使用參數化查詢,確保 userId 不會被直接插入到 SQL 查詢中,從而防止 SQL 注入攻擊。
2. 使用 HTTPS 保護網路傳輸
所有敏感資料的傳輸都應該使用 HTTPS,而非 HTTP,以確保資料在傳輸過程中的機密性和完整性。

Sub MakeSecureRequest
    Dim job As HttpJob
    job.Initialize("SecureRequest", Me)
    job.Download("https://secure.example.com/data")
End Sub

在這段程式碼中,所有的網路請求都使用 HTTPS,以加密和保護傳輸中的資料。
3. 保護應用程式免受 XSS 攻擊
跨站腳本攻擊(XSS)是通過在應用程式中注入惡意腳本來攻擊其他用戶的常見方式。防止 XSS 攻擊的核心在於正確地處理和顯示用戶輸入。

Sub DisplayUserInput(userInput As String)
    Dim sanitizedInput As String = userInput.Replace("<", "&lt;").Replace(">", "&gt;")
    Label1.Text = sanitizedInput
End Sub

這段程式碼展示了如何對用戶輸入進行基本的過濾,防止惡意腳本被執行。

範例程式:綜合應用

以下是一個範例應用程式,結合了資料加密、安全存儲和防範常見安全威脅的技術。

Sub Process_Globals
    ' 全域變數
End Sub

Sub Globals
    Dim edtPassword As EditText
    Dim btnSave As Button
    Dim btnLoad As Button
    Dim lblStatus As Label
End Sub

Sub Activity_Create(FirstTime As Boolean)
    Activity.LoadLayout("MainLayout")
    
    edtPassword.Initialize("edtPassword")
    Activity.AddView(edtPassword, 10, 10, 300, 50)
    
    btnSave.Initialize("btnSave")
    btnSave.Text = "保存密碼"
    Activity.AddView(btnSave, 10, 70, 150, 50)
    
    btnLoad.Initialize("btnLoad")
    btnLoad.Text = "加載密碼"
    Activity.AddView(btnLoad, 170, 70, 150, 50)
    
    lblStatus.Initialize("")
    Activity.AddView(lblStatus, 10, 130, 300, 50)
    
    InitializeEncryptedDatabase
End Sub

Sub btnSave_Click
    SaveEncryptedPreference("user_password", edtPassword.Text)
    lblStatus.Text = "密碼已保存"
End Sub

Sub btnLoad_Click
    Dim password As String = GetDecryptedPreference("user_password")
    lblStatus.Text = "已加載的密碼: " & password
End Sub

Sub InitializeEncryptedDatabase
    Dim sql As SQL
    sql.InitializeEncrypted(File.DirInternal, "secure_data.db", True, "YourSecretKey")
End Sub

結論
本章介紹了行動應用程式開發中至關重要的安全性與資料保護技術。通過使用加密技術保護用戶資料、安全存儲敏感資訊以及應對常見的安全威脅,你可以顯著提高應用程式的安全性,保護用戶的隱私和資料完整性。隨著你對這些技術的掌握,你將能夠開發出更加安全可靠的行動應用程式。

參考網址
https://www.b4x.com/


上一篇
Basic30天學會行動App-第18章.建立聊天App
下一篇
Basic30天學會行動App-第20章.實作使用者認證
系列文
用最接近自然語言的Basic30天學會行動App30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言