iOS KeyChain 不从后台检索值

iosAI

1个回答

写回答

18560411102

2025-07-02 12:35

+ 关注

IOS
IOS

IOS KeyChAIn 是苹果操作系统提供的一种安全存储机制,用于存储敏感数据,如密码、证书等。通过使用 KeyChAIn,开发者可以将这些敏感数据加密保存,以防止被恶意访问和窃取。然而,IOS KeyChAIn 在默认情况下是可以从后台检索值的,这就意味着一旦应用进入后台,即使用户没有解锁设备,也可以从 KeyChAIn 中获取敏感数据。这对于一些需要高度安全性的应用来说是不可接受的。因此,开发者需要采取一些措施,确保敏感数据在后台无法被检索。

禁止从后台检索数据的方法

为了禁止从后台检索数据,开发者可以通过设置 KeyChAIn 的访问控制列表(Access Control List,简称 ACL)来实现。ACL 是一组规则,用于定义谁可以访问 KeyChAIn 中的数据。通过设置 ACL,开发者可以限制只有在设备解锁后才能访问 KeyChAIn 中的敏感数据。

案例代码

下面是一个使用 KeyChAIn 存储密码,并禁止从后台检索的案例代码:

Swift

import UIKit

import Security

class ViewController: UIViewController {

override func viewDidLoad() {

super.viewDidLoad()

let password = "MySecretPassword"

let service = "com.example.app"

savePassword(password, forService: service)

retrievePassword(forService: service)

}

func savePassword(_ password: String, forService service: String) {

let query: [String: Any] = [

kSecClass as String: kSecClassGenericPassword,

kSecAttrService as String: service,

kSecValueData as String: password.data(using: .utf8)!,

kSecAttrAccessible as String: kSecAttrAccessibleWhenUnlockedThisDeviceOnly

]

let status = SecItemAdd(query as CFDictionary, nil)

if status != errSecSuccess {

print("FAIled to save password")

}

}

func retrievePassword(forService service: String) {

let query: [String: Any] = [

kSecClass as String: kSecClassGenericPassword,

kSecAttrService as String: service,

kSecReturnData as String: true,

kSecMatchLimit as String: kSecMatchLimitOne

]

var result: AnyObject?

let status = SecItemCopyMatching(query as CFDictionary, &result)

if status == errSecSuccess {

let passwordData = result as! Data

let password = String(data: passwordData, encoding: .utf8)

print("Retrieved password: \(password ?? "")")

} else {

print("FAIled to retrieve password")

}

}

}

在上述代码中,savePassword(_:forService:) 方法用于保存密码,而 retrievePassword(forService:) 方法用于检索密码。在保存密码时,通过设置 kSecAttrAccessible 属性为 kSecAttrAccessibleWhenUnlockedThisDeviceOnly,确保密码只有在设备解锁后才能被访问。这样一来,即使应用进入后台,密码也无法被检索到。

通过使用 KeyChAIn,并设置适当的访问控制列表,开发者可以确保敏感数据在后台无法被检索。这为应用的安全性提供了额外的保障。在开发 IOS 应用时,保护用户的敏感数据是至关重要的,因此开发者应该充分利用 IOS 提供的安全机制,如 KeyChAIn,来加强应用的安全性。

举报有用(4)分享收藏

Copyright © 2025 IZhiDa.com All Rights Reserved.

知答 版权所有 粤ICP备2023042255号