每当应用程序的安全性出现时,事实证明很多人都不知道这是一个问题。例如,每当我们的应用程序背景化并且存储在本地存储中时,iOS就会对可见屏幕进行屏幕截图。
现在这就是我想要摆脱的东西。我正在开发一个在线金融交易的应用程序,我希望我的应用程序在安全方面非常强大。以下是我的应用程序背景时存储屏幕截图的路径。
路径: / private / var / mobile / Applications / 15980ADD-B269-4EBE-9F52- B6275AFB195A / Library / Caches / Snapshots / com.ABC.myAppName / screenshotName.PNG
这是一个看起来非常关键的图像:
更重要的情况是,如果用户输入了他/她的信用卡/借记卡号码,包括CVV2号码和其他重要信息,可能会在后台强制使用App一段时间。
我一直在对此进行一些搜索,并且我知道,为了让攻击者能够利用这种攻击,他可以通过两种方式获得访问权限:
攻击者需要物理访问设备 越狱。
需要与使用jail的用户在同一网络上 设备并尝试远程访问设备。
我可以做些什么来避免这种情况发生?是否有任何解决方案可以避免攻击者以这种方式访问敏感信息?
此外,当应用程序处于后台时,我已获得建议启用空白屏幕截图或删除应用程序的屏幕截图。但是,我不知道该选择什么以及如何正确地做到这一点。还有其他选择吗?
答案 0 :(得分:26)
我可以提出几点建议:
1)您知道应用程序即将通过应用程序委托方法放入background
的时间:
- (void) applicationDidEnterBackground:(UIApplication *)application
That's the exact moment the snapshot is generated。为什么不将你的观点改变为不同的或更多的东西"安全"?
2)
如果你想要"安全"当您将应用程序带回前台时,可以忽略(或伪造)快照,您可以使用" [UIApplication ignoreSnapshotOnNextApplicationLaunch]
"。
3)
您还可以添加" UIApplicationExitsOnSuspend
"将应用程序放入后台时,将其放入应用程序的Info.plist中,这将完全终止您的应用程序而不保存快照。
答案 1 :(得分:11)
Apple告诉我们在转到background
之前隐藏安全信息,所以只需给它一个隐藏所有内容的图像:
-(void)applicationWillResignActive:(UIApplication *)application
{
if(needToHide){
_imageView = [[UIImageView alloc]initWithFrame:[self.window frame]];
[_imageView setImage:[UIImage imageNamed:@"HideME.png"]];
[self.window addSubview:_imageView];
}
}
- (void)applicationDidBecomeActive:(UIApplication *)application
{
if(_imageView != nil) {
[_imageView removeFromSuperview];
_imageView = nil;
}
}