在iOS里我们的安全是很重要的,比如内存里的数据,沙盒里的数据,等等都是我们做为一个安全必须要考虑的,做出合格的并且安全的app是我们刻不容缓的。
最近我们在做这个第三方的安全评测,给我们发来了好多评测点。
【敏感数据残留】
这个问题就要说说了。他们评测机构的描述是:【登录后扫描到敏感信息残留】,问题的严重程度就定义到了【严重】级别。
【解决办法】
在iOS里添加了对NSString的延展,看具体方法。
-(void)memoryClearStirng{
NSString *ClearStr = [[NSString alloc]initWithFormat:@"%@",self];
const char*string = (char *)CFStringGetCStringPtr((CFStringRef)ClearStr,CFStringGetSystemEncoding());
memset(&string, 0, sizeof(self));
}
【使用】
[self.verifyTextField.text memoryClearStirng];
里头的方面我就不具体解释了,请看【念茜的博客】大神级别的。
检查过程如下
发来的报告是通过MEMSCAN检测内存中的数据。我们来验证一下
1:检查具备条件:一个越狱的手机这个是必须的
开始检测:
查看手机IP root进入权限:ssh root@192.168.1.80
在root之前会让你输入密码。默认输入密码:alpine
root进入权限.png
2:获取手机运行程序的ID:ps-ax | grep RefreshAndroid
获取手机运行程序的ID.png3:根据ID来存入内存记录:memscan -p 64685 -d -o out4.bin
内存记录.png4:数据的记录数量为0,则表示没有内存擦除成功。
查找内存的记录.png如果不是0,可以grep-a 数据内容 out4.bin来查看内存中关于这个记录。
如有问题可添加我的QQ:1290925041
还可添加QQ群:234812704(洲洲哥学院)
欢迎各位一块学习,提高逼格!
也可以添加洲洲哥的微信公众号
更多消息
更多信iOS开发信息 请以关注洲洲哥 的微信公众号,不定期有干货推送:
这里写图片描述
网友评论
此外我在越狱的ios 7.1上实验了。
代码如下(参考念茜博客的原文代码,直接赋了常量字符串):
NSString *testStr = [[NSString alloc] initWithFormat:@"14642334"];
char *str = malloc(9*sizeof(char));
str = (char *)CFStringGetCStringPtr((CFStringRef)testStr,CFStringGetSystemEncoding());
memset(str , 0 , 7);
ps -ax | grep Test
memscan -p 715 -d output.bin
grep -c 14642334 output.bin 得到结果1。
这代码没有执行的时候,执行结果依然是1。
可能说明两个问题:
1. 常量字符串是没法清除的。
2. 不管代码有没有执行到NSString *testStr = [[NSString alloc] initWithFormat:@"14642334"];
14642334这个常量字符串已经在内存中存在。
请问博主在测试的时候有没有遇到类似的问题呢?以及这个问题是不是跟ios系统的版本有关呢。
清空的是指向string的指针,而不是string指向的字符串。
改成 memset(string, 0, sizeof(self));清的才是真正的字符串。
具体可以调试里看到string指向的内存并没有被清空,而是string本身的值被清空。
memset(&string, 0, sizeof(self));
还是
memset(string, 0, sizeof(self));
才达到清空内存残留的问题尼?
这个评测机构是 《中国软件评测中心》