目前我有一个应用程序,它具有存储用户ID的“记住我”选项。因此,我目前正在使用Keychain API来存储此信息。
但是我担心如果设备被盗并且有人越狱了该设备,他是否能够从Keychain中获取所有这些数据?
如何防止这种情况发生?
kSecAttrAccessibleAlways
或kSecAttrAccessibleAlwaysThisDeviceOnly
,因为数据没有得到安全加密(详见苹果文档)。不使用这些会为KeyChain数据增加一层安全保护,但仍需要用户设置强密码来保护他的数据。如果用户的设备上没有设置密码,那么数据就是不受保护的。如果用户设置了4位数字密码(标准密码),则数据的保护非常脆弱,可以在几分钟内被暴力破解。为了更加安全,我建议在现有的所有安全措施之上再增加一层,并检查设备是否越狱。如果是这种情况,我会删除当前KeyChain中的敏感数据。
类似于这样:
NSString *filePath = @"/Applications/Cydia.app";
if ([[NSFileManager defaultManager] fileExistsAtPath:filePath])
{
//Device is jailbroken --> delete KeyChain
}
FILE *f = fopen("/bin/bash", "r");
BOOL isbash = NO;
if (f != NULL)
{
//Device is jailbroken --> delete KeyChain
isbash = YES;
}
fclose(f);
这是检查设备是否越狱的最佳方法
bool forked = fork(); if (forked) { // 设备已越狱 }