Junior — Middle
Jak zapewniasz bezpieczeństwo podczas przechowywania poufnych informacji?
sobes.tech AI
Odpowiedź od AI
Aby zapewnić bezpieczeństwo podczas przechowywania poufnych informacji w iOS, zwykle używa się Keychain — chronionego magazynu zapewnianego przez system. Keychain szyfruje dane i ogranicza dostęp do nich, co zapobiega nieautoryzowanemu dostępowi.
Ponadto ważne jest:
- Nie przechowywać haseł i sekretów w jawnej formie w UserDefaults lub plikach.
- Używać szyfrowania, gdy konieczne jest przechowywanie danych poza Keychain.
- Ograniczać dostęp do danych za pomocą ustawień dostępu Keychain (np. dostęp tylko przy odblokowanym urządzeniu).
Przykład zapisu i odczytu ciągu znaków w Keychain za pomocą Swift:
import Security
func saveToKeychain(value: String, forKey key: String) {
let data = value.data(using: .utf8)!
let query: [String: Any] = [
kSecClass as String: kSecClassGenericPassword,
kSecAttrAccount as String: key,
kSecValueData as String: data
]
SecItemDelete(query as CFDictionary) // Usuwa starą wpis
SecItemAdd(query as CFDictionary, nil)
}
func loadFromKeychain(key: String) -> String? {
let query: [String: Any] = [
kSecClass as String: kSecClassGenericPassword,
kSecAttrAccount as String: key,
kSecReturnData as String: true,
kSecMatchLimit as String: kSecMatchLimitOne
]
var dataTypeRef: AnyObject? = nil
let status = SecItemCopyMatching(query as CFDictionary, &dataTypeRef)
if status == errSecSuccess, let data = dataTypeRef as? Data {
return String(data: data, encoding: .utf8)
}
return nil
}