【发布时间】:2019-01-19 06:04:09
【问题描述】:
出于安全原因,我们需要始终从内存中擦除敏感数据。 通常这不是我在 IOS 中看到的,但对于需要扩展安全性的应用程序来说,这非常重要。
如果 NSData 和 NSString 对象通常需要擦除的数据(指向 nil 不会擦除数据,这是一个安全漏洞)
我已经设法用下面的代码擦除了我的 NSStrings(当密码是 NSString 时):
unsigned char *charPass;
if (password != nil) {
charPass = (unsigned char*) CFStringGetCStringPtr((CFStringRef) password, CFStringGetSystemEncoding());
memset(charPass, 0, [password length]);
password = nil;
}
- 关于此实现的重要说明:您必须在调用 charPass 之前检查 NULL,否则它可能会崩溃。不能保证 CFStringGetCStringPtr 会返回一个值!
当密码为 NSData 时,它假设更加严格并且下面的代码假设可以工作:
memset([password bytes], 0, [password length]);
但这给了我一个编译错误:
没有匹配的函数调用'memset'
我找不到一种解决方法来指向密码地址并像我对字符串所做的那样擦除那里的字节(字节方法应该让我按照我的理解做到这一点,但由于某种原因它无法编译我想不通)
有人对此有想法吗?
10 倍
【问题讨论】:
标签: ios objective-c nsstring nsdata memset