目前我有一个应用程序,它有一个"记住我"选项用于存储用户ID.所以存储这个当前我使用的是Keychain API.
但我有一个疑问,如果偶然设备被盗,有人越狱设备.他能从钥匙串中获取所有这些数据吗?
怎么预防这个?
使用KeyChain时最重要的是不使用kSecAttrAccessibleAlways或kSecAttrAccessibleAlwaysThisDeviceOnly因为数据未安全加密(请参阅Apple的文档).不使用它们会为KeyChain数据增加一层安全性,但用户仍需要强大的密码来保护他的数据.如果用户在设备上没有密码,则数据不受保护.如果用户有一个4位数的密码(标准),则数据受到非常微弱的保护,并且可以在几分钟内强制执行.
如果您需要防止越狱(以及其他攻击),您最好的选择是不使用KeyChain,而是创建自己的加密敏感数据存储,并要求用户拥有安全密码.使用从该密码生成的密钥存储加密的数据.
这可能会给您的用户带来不便,因此如果您希望在需要密码之间提供宽限期,请考虑一种向应用程序提供会话cookie的方法,该方法会在一段时间后失效.