Junior — Middle
Πώς διασφαλίζετε την ασφάλεια κατά την αποθήκευση εμπιστευτικών πληροφοριών;
sobes.tech AI
Απάντηση από AI
Για να διασφαλίσετε την ασφάλεια κατά την αποθήκευση εμπιστευτικών πληροφοριών στο iOS, συνήθως χρησιμοποιείται το Keychain, μια προστατευμένη αποθήκευση που παρέχεται από το σύστημα. Το Keychain κρυπτογραφεί τα δεδομένα και περιορίζει την πρόσβαση σε αυτά, αποτρέποντας μη εξουσιοδοτημένη πρόσβαση.
Επιπλέον, είναι σημαντικό:
- Να μην αποθηκεύετε κωδικούς πρόσβασης και μυστικά σε ανοιχτό κείμενο σε UserDefaults ή αρχεία.
- Να χρησιμοποιείτε κρυπτογράφηση όταν χρειάζεται να αποθηκεύσετε δεδομένα εκτός του Keychain.
- Να περιορίζετε την πρόσβαση στα δεδομένα μέσω των ρυθμίσεων πρόσβασης του Keychain (π.χ., πρόσβαση μόνο όταν η συσκευή είναι ξεκλείδωτη).
Παράδειγμα αποθήκευσης και ανάγνωσης μιας συμβολοσειράς στο Keychain με 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) // Διαγραφή παλαιάς εγγραφής
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
}