Universal Links是否在iOS中缓存?他们离线工作吗?

时间:2016-12-23 17:08:47

标签: ios security https ios-universal-links applinks

我通过打开飞行模式在iOS中测试了Universal Links,看到正确的应用程序被打开了(而不是网站)

这表示某种程度的缓存" apple-app-site-association

我想确定缓存它的程度,所以我可以确定

  • 有哪些UX边缘案例(例如,离线x天)
  • 有哪些安全注意事项(例如MITM / SSLStrip + .well-known / URL)

理想情况下,如果使用其他逻辑,我希望获得详细信息(如果使用HTTPS,则使用条件缓存,DNSSec等)

2 个答案:

答案 0 :(得分:10)

这里的确切行为(故意?)不清楚Apple。以下是我的个人经历,部分来自官方文档,部分来自帮助数千个应用程序在Branch.io实施Universal Links。

  • 首次安装应用时,apple-app-site-association文件将一次缓存。
  • 如果这个初始刮擦失败,几乎在所有情况下都不会重新尝试。唯一的例外是如果初始返回是5xx错误,在这种情况下可能会发生有限次数的重试。这没有详细记录,并且根本不包含在Universal Links文档中。您可以在Shared Web Credentials docs
  • 中找到提及
  • 打开通用链接时,文件。这就是您能够在飞行模式下获得通用链接行为的原因。
  • 文件未过期。缓存后,只要安装了应用程序,它就会永久保留。
  • 安装应用更新时,将重新检查该文件。
  • 必须通过https://example.com/apple-app-site-associationhttps://example.com/.well-known/apple-app-site-association上的有效SSL连接访问该文件。如果存在任何类型的重定向,则会失败。
  • 如果您能够直接在相关设备上安装新的SSL证书,理论上可以对请求进行MITM。例如Charles Proxy使用此方法进行调试。我从未见过或听说过这种被利用,并且损害将非常有限,因为域名仍然必须在应用程序内部指定。

答案 1 :(得分:0)

我找到了解决缓存问题的方法。缓存与域名绑定,因此每次您希望 iOS 请求 apple-app-site-association 时,您都可以创建一个新的子域,并将 iOS 配置为使用该子域作为您应用的通用链接。

非常笨拙,但这是唯一对我有用的解决方法。