用户是否有权访问 iOS 沙箱中的文档目录?

Do users have access to the Documents directory in an iOS sandbox?

我在应用程序沙盒的文档目录中保存跟踪用户虚拟购买的数据。出于明显的原因,我不希望用户访问或能够操作此文件。

这是存储这些文件的正确目录吗?如果不是,我可以在哪里存储用户无法访问的文件?

我确实从 Apple 找到了这个 link,它建议像这样的数据应该存储在 Library 目录中。它似乎并没有说明它是否安全以防止用户访问它。

我不是 iOS 安全专家,但是,我可以分享我在 iOS 上处理用户数据的经验。任何 corrections/remarks 都表示赞赏。

一般来说,最好的建议是通过 SSL-protected 连接远程存储重要用户的数据(即拥有服务器后端或使用 iCloud)。但是,如果您出于某种原因被迫在本地存储数据,这里有一些建议:

1) 永远不要将重要数据保存在 Documents 目录或 NSUserDefaults 。即使在 non-jailbroken 设备上,用户也可以很容易地访问它。例如,您可以查看 iExplorer:据我所知,它可以解决问题。

2) 如果您确实需要在本地存储一些数据,无论您选择:Documents 文件夹、UserDefaultsCoreData,您都必须对其进行加密。算法的选择取决于您,但最好使用一些 iOS built-in 解决方案。

3) 数据加密假定您的应用程序拥有用于解密它的密钥。存储密钥的最佳方式是 KeyChain。可能,这是唯一可以存储密钥和其他内容(如用户授权数据)而无需担心从外面被盗的地方。

最终,在所有这些步骤之后,您的用户的加密数据仍然可以被用户访问。除非加密,否则无法读取它,但通过访问自己的钥匙串和一些技巧,高级用户最终可以获得原始数据。而且,它仍然可以损坏。因此,就保护数据免遭损坏或删除而言,您仍然需要将备份或数据本身存储在远程某个地方。

您应该将 Documents 目录中的数据视为 public。任何拥有 iOS 设备并使用 iExplorer 或 iFunBox 等工具通过 USB 连接到计算机的人都可以查看应用程序的 Documents 和 Caches 目录的内容。为了安全起见,请考虑使用钥匙串(如果适用)或验证收据(共享机密、用户信息等)的网络服务,以确保用户实际购买了产品,而不是试图欺骗交易。