首页 > 解决方案 > 关于自定义 URL 方案传输数据的方式

问题描述

我知道自定义 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被我以外的其他应用程序捕获或泄露吗?

标签: ios

解决方案


,在自定义 URL 方案或通用链接中共享敏感数据是不安全的。

可以使用相同的自定义 URL 方案注册两个应用程序,此时操作未定义哪个应用程序将打开,但假设您已卸载并且假应用程序安装在设备中,那么您的自定义 URL 方案将打开假应用程序并且数据可以该应用程序可以轻松阅读。

在通用链接中,当您的应用未安装时,它将打开 Safari,并且 URL 字段将包含可以从那里复制的完整路径。

在我看来,在两个或多个应用程序之间共享敏感数据的最佳方式是使用Shared Keychain

如果您开发了一系列应用程序,所有这些应用程序都依赖于相同的用户密码,您可以使用访问组在这些应用程序之间安全地共享该密码。例如,您可以共享凭据,以便登录到您的一个应用程序会自动授予用户对您所有应用程序的访问权限。这种共享不需要与用户进行交互或获得用户的许可,但将共享限制为由单个开发团队交付的应用程序。


推荐阅读