关于传输数据的自定义URL方案方式

时间:2019-05-13 13:11:15

标签: ios

我知道自定义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_datasensitive_data是否会被我的其他应用捕获或泄漏?

2 个答案:

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

  

如果您开发一系列应用程序,所有这些应用程序都依赖于同一用户   机密,您可以使用访问组在各个机密之间安全地共享该机密   这些应用。例如,您可以共享凭据,以便日志记录   进入您的一个应用程序会自动授予用户访问所有   您的应用。这种共享不需要与或进行互动   用户的许可,但仅限共享给   由一个开发团队完成。