【问题标题】:How can I force iOS MapKit to use HTTPS for all its communications?如何强制 iOS MapKit 使用 HTTPS 进行所有通信?
【发布时间】:2017-01-25 18:33:05
【问题描述】:

在我的应用程序中嵌入地图会导致产生许多 HTTP 请求,格式如下:

http://gspe19.ls.apple.com/tile.vf?flags=1&style=1&size=2&scale=0&v=99999999&z=99&x=9999&y=9999&checksum=1&sid=999999&accessKey=XXXXXX

这是在地图上滚动时显示的图块数据。然而,HTTP 的使用是一个信息泄露问题——任何在网络上窃听的人都可以识别您正在查看的位置,并可能会通过中间人攻击数据来为您提供不正确的信息或尝试触发错误。

有没有办法强制 MapKit 通过 HTTPS 发送这些请求? API 文档对此并不清楚。

【问题讨论】:

  • 将此情况报告给 Apple。这可能是只有 Apple 才能解决的问题。
  • 我也想找到一个应用解决方法,因为任何修复都可能只适用于未来的 iOS 版本。除非它从地图 API 完整接收这些 URL,否则可能只是对它们的 API 响应进行修改。

标签: ios security mapkit man-in-the-middle interception


【解决方案1】:

这似乎有点矫枉过正,但您可以完全替换地图内容以使用您自己的服务器,这样它就不会与苹果的服务器通信来加载地图数据。

NSString *template = @"https://c.tile.openstreetmap.org/{z}/{x}/{y}.png";
overlay = [[MKTileOverlay alloc] initWithURLTemplate:template];
overlay.canReplaceMapContent = YES;
[map addOverlay:overlay level:MKOverlayLevelAboveLabels];

您也可以测试一下MKMapSnapshotter 是否也是不安全的。如果不是,您可以在实现loadTileAtPath:result:MKTileOverlay 子类中使用它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-06-02
    • 2013-11-12
    • 1970-01-01
    • 2023-03-13
    • 2016-04-10
    • 1970-01-01
    • 2011-12-23
    • 1970-01-01
    相关资源
    最近更新 更多