在行動應用程式的開發過程中,安全性與資料保護是至關重要的課題。隨著數位化進程的加速,保護用戶的個人資訊和應用程式的敏感資料不僅是技術需求,更是法律和道德的責任。本章將介紹如何在 B4A 應用程式中實現資料加密、安全地存儲敏感資訊,並應對常見的安全威脅。
加密是保護資料的一個核心技術手段,通過將明文轉換為不可讀的密文,來確保即使資料被攔截,也無法被非法讀取。B4A 支援使用 AES(Advanced Encryption Standard)等標準加密算法來保護用戶資料。
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 是加密密鑰,應該被安全存儲並僅限於授權用戶使用。
在行動應用程式中,常常需要存儲敏感資訊,如用戶密碼、支付資訊等。這些資料不應該以明文形式存儲在設備上,而應使用加密技術來保護。
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)、以及設備丟失導致的資料洩露。本節將簡要介紹如何應對這些威脅。
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("<", "<").Replace(">", ">")
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
結論
本章介紹了行動應用程式開發中至關重要的安全性與資料保護技術。通過使用加密技術保護用戶資料、安全存儲敏感資訊以及應對常見的安全威脅,你可以顯著提高應用程式的安全性,保護用戶的隱私和資料完整性。隨著你對這些技術的掌握,你將能夠開發出更加安全可靠的行動應用程式。