iOS每次发送到后台时都会截取应用程序的屏幕截图 - 我如何保护我的应用程序?

时间:2014-12-03 07:28:10

标签: ios iphone security nsdocumentdirectory

每当应用程序的安全性出现时,事实证明很多人都不知道这是一个问题。例如,每当我们的应用程序背景化并且存储在本地存储中时,iOS就会对可见屏幕进行屏幕截图。

现在这就是我想要摆脱的东西。我正在开发一个在线金融交易的应用程序,我希望我的应用程序在安全方面非常强大。以下是我的应用程序背景时存储屏幕截图的路径。


路径: / private / var / mobile / Applications / 15980ADD-B269-4EBE-9F52- B6275AFB195A / Library / Caches / Snapshots / com.ABC.myAppName / screenshotName.PNG


这是一个看起来非常关键的图像:

enter image description here


更重要的情况是,如果用户输入了他/她的信用卡/借记卡号码,包括CVV2号码和其他重要信息,可能会在后台强制使用App一段时间。

我一直在对此进行一些搜索,并且我知道,为了让攻击者能够利用这种攻击,他可以通过两种方式获得访问权限:

  • 攻击者需要物理访问设备 越狱。

  • 需要与使用jail的用户在同一网络上 设备并尝试远程访问设备。

我可以做些什么来避免这种情况发生?是否有任何解决方案可以避免攻击者以这种方式访问​​敏感信息?

此外,当应用程序处于后台时,我已获得建议启用空白屏幕截图或删除应用程序的屏幕截图。但是,我不知道该选择什么以及如何正确地做到这一点。还有其他选择吗?

2 个答案:

答案 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;
    }
}