应用程序移至 bin 时删除数据 - Swift 多平台项目

问题描述 投票:0回答:1

我想存储敏感数据,当应用程序移动到 bin 时必须删除这些数据,而不是在更新应用程序时(安装较新版本的应用程序)。当我将应用程序移动到 bin 时,数据仍然保留在 MacBook 上,因此当我再次安装应用程序时,敏感数据会被加载。此问题仅在 macOS 上出现,因为 iOS 和 iPadOS 在卸载时会清除所有数据。

我尝试了很多存储选项。 SQLite 文件存储在 applicationSupportDirectory、temporaryDirectory 中,但没有任何效果。我也尝试使用 UserDefaults 来存储这些数据,但也没有成功。 我希望我安装应用程序,它会将这些数据存储在某个地方,当我更新应用程序时,数据会保留,但是当我通过将其移动到 BIN 来卸载该应用程序时,它将删除这些数据。

我应该使用什么类型的数据存储或将其存储在何处,以便在应用程序移至垃圾箱时将其删除?谢谢你

swift macos multiplatform
1个回答
0
投票

您的观察似乎存在差距。当您将任何沙盒应用程序扔进垃圾箱时,它都会删除其容器中的用户默认设置。您是否忘记将您的应用程序置于沙盒中? iOS 上的所有应用程序都必须沙箱化,但在 macOS 上您可以选择退出沙箱化,所以也许您不小心这样做了?

也就是说,您不想将敏感数据保存在用户默认值或 SQLite 数据库中,因为它们都未加密。你想要钥匙扣。但钥匙串不会删除(因为它在用户的不同 Mac 之间同步)。但这没关系,钥匙串是受密码保护的,因此任何能够在卸载您的应用程序后提取钥匙串的用户也可以在之前提取信息。

如果您的敏感数据是特定于安装的,您可以做的是创建一个随机值(例如,附加到用户名的随机数)并将其保存到用户默认值。然后使用该值将您的敏感数据保存到钥匙串中。当您的沙盒应用程序被扔进垃圾箱时,其用户默认设置将被删除。因此,下次用户安装它时,它会生成一个新的随机数,并以不同的名称保存新的敏感数据,而忽略旧的。 Apple 操作系统实际上没有删除特定于安装的钥匙串值的概念。

如果您确实需要数据消失,而不仅仅是无法访问(即出于法律原因),我想您必须对此进行变体:生成,例如RSA 密钥而不是随机数,将其存储在钥匙串中,然后将您的实际敏感数据以 RSA 加密形式存储在应用程序支持的文件中(只要您的应用程序处于沙盒状态,该应用程序就会被删除) ,使用该键。

但请记住,这很容易出错。将错误的参数传递给加密 API 很容易,并且通常会导致加密被破解。因此,如果仅将其存储在钥匙串中的随机密钥下就足够了,我建议您这样做。 Apple 将进行渗透测试并升级钥匙串的加密,以确保其安全,因此您不必自己这样做,并且可能会出错。

© www.soinside.com 2019 - 2024. All rights reserved.