Sobes.tech
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
}