如何在本地将信息从 Safari 共享扩展传回网页?

问题描述 投票:0回答:2

iOS/Android 上的 Imagine 网页能够使用 Safari 共享扩展共享文件(使用 Web Share API)和自定义请求内容。

我正在寻找一种可靠的方法来从 Safari 共享扩展到网页获取响应(假设是任意 JSON)。

我已经尝试过但失败的选项:

  • 通过 WebRTC 传递响应——本地通信似乎仍然不可能,避免使用互联网服务器。
  • 从网页传递端口号并使 Safari 共享扩展打开该端口并向任何连接的人提供响应。浏览器无法使用非 SSL 连接,而且本地主机的自签名证书在每台设备上都不可信。
android ios mobile-safari share-extension
2个回答
1
投票

不清楚你的解决方案的设计约束是什么,所以我无法给出完整的答案。我可以建议进行以下调查(对于放置在这里的问题评论来说太长了):

  1. 如果你从攻击者/安全研究的角度来看它,那么你可以做的是尝试一个流行应用程序的自定义 URL 方案,比如 TikTok,看看它是否可以用来暴露特定于应用程序的漏洞(数据泄露)。

  2. 如果您正在尝试指定端口的第二个选项但遇到签名限制,那么为什么不购买 DNS 主机,并使用 LetsEncrypt 为其获取适当的 SSL 证书。然后 Safari 将连接。

  3. 如果您正在尝试开始用户参与,请编写和部署用户可以安装的 iOS 应用程序,然后通过共享扩展触发它。然后你可以从手机中获取任意的 JSON。

  4. 有证据表明,浏览器开发人员将来可能能够在 iOS 上部署非默认的 WebKit 体验,因此如果移动浏览器锁定政策放松,可能有一种方法可以在那里添加自定义功能。监管压力正朝着这个方向发展,因此值得关注。

Mobile Safari 的历史记录

过去,Mobile Safari 可以通过 Web Share API 将文件内容返回给接收者。这是一个自修复以来的安全漏洞,但是在零之路(我是作者。)一书中有对此的详细说明以及所采用的相关技术


0
投票

将数据从 Safari 共享扩展传递到网页的一个选项是使用自定义 URL 方案。您可以将 Safari 共享扩展配置为打开自定义 URL 方案,并将响应数据编码为参数。然后,您的网页可以侦听此自定义 URL 方案并从参数中提取响应数据。

以下是实施此解决方案的一般步骤:

为您的应用定义自定义 URL 方案。这应该是一个独特的方案,没有被任何其他应用程序使用。您可以将 URL 方案添加到应用程序的 Info.plist 文件中。 在您的 Safari 共享扩展中,打开一个带有自定义 URL 方案的 URL,并将响应数据编码为参数。例如:myapp://response?data=encoded_data_here。 在您的网页中,侦听自定义 URL 方案并从参数中提取响应数据。您可以使用 JavaScript 来解析 URL 并提取参数值。 下面是一个如何在 JavaScript 中监听自定义 URL scheme 的例子:

function handleCustomURLScheme(url) {
  // Parse the URL and extract the response data from the parameter
  var params = new URLSearchParams(url.search);
  var responseData = params.get('data');

  // Do something with the response data
  console.log(responseData);
}

// Listen for the custom URL scheme
window.addEventListener('load', function() {
  if (window.location.protocol == 'myapp:') {
    handleCustomURLScheme(window.location);
  }
});

请注意,使用自定义 URL 方案有一些安全考虑,因为任何应用程序都可以注册自己的自定义 URL 方案并可能拦截用于您的应用程序的数据。您应该使用独特且难以猜测的方案,并验证收到的数据以确保它来自您的 Safari 共享扩展。

© www.soinside.com 2019 - 2024. All rights reserved.