我知道自定义URL方案的工作原理。基本上,我只需要在Info.plist中定义一个自定义URL方案,并按以下方式进行处理即可:
func application(_ app: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey : Any] = [:]) -> Bool {
// here I only printout
print("url host: \(String(describing: url.host))")
print("url path: \(url.path)")
return true
}
例如,如果我将url定义为myapp://foo.com/bar
,则上述函数会将主机打印为foo.com
,将路径打印为bar
。
我的问题是,从总体上讲,这是在两个应用程序之间传输数据的一种安全方法吗,也就是说另一个应用程序会打开自定义URL并使用path
来传输一些敏感信息。例如myapp://foo.com/sensetive_data
。 sensitive_data
是否会被我的其他应用捕获或泄漏?
答案 0 :(得分:0)
我认为,如果您的敏感数据未加密,那是不安全的。
要读取您的敏感数据,我只需要卸载第二个应用程序,并安装自己的注册程序即可访问数据。
因此,您可以:
编辑: 对于加密,您可以使用安全性框架:https://developer.apple.com/documentation/security/certificate_key_and_trust_services/keys/using_keys_for_encryption
答案 1 :(得分:0)
否,在自定义URL方案或通用链接中共享敏感数据并不安全。
可以使用相同的自定义URL方案注册两个应用程序,这时尚未定义打开哪个应用程序的操作,但假设您已卸载并在设备中安装了虚假应用程序,那么您的自定义URL方案将打开虚假应用程序该应用可以轻松读取数据。
在通用链接中,如果未安装您的应用程序,它将打开Safari,并且URL归档将包含完整路径,可以从那里复制该路径。
我认为在两个或多个应用之间共享敏感数据的最佳方法是使用Shared Keychain。
如果您开发一系列应用程序,所有这些应用程序都依赖于同一用户 机密,您可以使用访问组在各个机密之间安全地共享该机密 这些应用。例如,您可以共享凭据,以便日志记录 进入您的一个应用程序会自动授予用户访问所有 您的应用。这种共享不需要与或进行互动 用户的许可,但仅限共享给 由一个开发团队完成。