ios - 关于自定义 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
被我以外的其他应用程序捕获或泄露吗?
解决方案
不,在自定义 URL 方案或通用链接中共享敏感数据是不安全的。
可以使用相同的自定义 URL 方案注册两个应用程序,此时操作未定义哪个应用程序将打开,但假设您已卸载并且假应用程序安装在设备中,那么您的自定义 URL 方案将打开假应用程序并且数据可以该应用程序可以轻松阅读。
在通用链接中,当您的应用未安装时,它将打开 Safari,并且 URL 字段将包含可以从那里复制的完整路径。
在我看来,在两个或多个应用程序之间共享敏感数据的最佳方式是使用Shared Keychain。
如果您开发了一系列应用程序,所有这些应用程序都依赖于相同的用户密码,您可以使用访问组在这些应用程序之间安全地共享该密码。例如,您可以共享凭据,以便登录到您的一个应用程序会自动授予用户对您所有应用程序的访问权限。这种共享不需要与用户进行交互或获得用户的许可,但将共享限制为由单个开发团队交付的应用程序。
推荐阅读
- jquery - 如何使用 on.change 函数自动清除/重置日期选择器?
- excel - Excel 2007 无法打开 php xlsxwriter 生成的文件
- python-3.x - 提示用户输入任意数量读数并通过输入非数字值终止的程序
- optimization - AMPL代码编译问题:已定义
- javascript - Android:如何在 Webview 中检查 findElementById 是否返回 null?
- javascript - 为什么 console.log(array) 不给出与 console.log({array}) 相同的结果?
- java - 将 Jackson 的 @JsonGetter 与 Lombok 的 @Getter 结合起来
- reactjs - React Styled Components - 使用道具变换比例
- gnuplot - GNUPLOT:使用带有调色板选项的 splot,再现平滑的颜色变化
- php - Doctrine - 当主键不等于外键时如何获取记录