iOS 17.2 用户代理更改:备受瞩目还是苦不堪言?
2023-03-11 08:50:22
iOS 17.2 的用户代理变更:影响、后果和解决方法
随着 iOS 17.2 的发布,用户代理设置发生了重大变化,引起了广泛关注。让我们深入了解这一问题及其潜在影响。
什么是用户代理?
用户代理是一个字符串,当浏览器或应用程序向服务器发送请求时,它会标识自己。它包含有关浏览器的类型、版本、操作系统和其他相关信息。
iOS 17.2 的影响
在 iOS 17.2 之前,可以通过 NSUserDefaults 设置用户代理。这为开发人员提供了灵活性,让他们可以根据需要轻松更改用户代理字符串。然而,在 iOS 17.2 中,这一设置已被废弃,开发人员无法再使用 NSUserDefaults 设置用户代理。
这一更改对依赖用户代理设置的 App 内网页造成了严重影响。由于无法设置自定义的用户代理,许多 App 内网页无法正常工作或无法获取准确的数据。此外,在 iOS 17.2 中,App Transport Security (ATS) 的要求也变得更加严格,这意味着网站必须使用 TLS 加密才能与 App 内网页通信。
安全性和隐私影响
用户代理的更改也对安全性产生了重大影响。由于无法设置自定义的用户代理,攻击者可以更轻松地伪装成合法的用户,从而发起网络钓鱼攻击或其他恶意活动。此外,ATS 要求的加强给某些网站带来了挑战,这些网站可能无法满足安全要求,导致 App 内网页无法加载。
开发人员的困境
这一更改对开发人员来说无疑是挑战重重。开发人员需要找到新的方法来解决用户代理设置问题,并确保其 App 内网页能够在 iOS 17.2 上正常工作。
解决方法
- 使用 WKWebView
WKWebView 是一个相对较新的 Web 视图,它支持自定义的用户代理设置。开发人员可以改用 WKWebView 来实现自定义的用户代理设置。
let webView = WKWebView(frame: CGRect(x: 0, y: 0, width: 320, height: 480))
webView.customUserAgent = "Mozilla/5.0 (iPhone; CPU iPhone OS 17_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.2 Mobile/15E148 Safari/604.1"
- 使用 ATS 例外
开发人员可以为受影响的网站添加 ATS 例外,以允许它们使用不安全的连接。但是,这是一种权宜之计,应谨慎使用。
func application(_ application: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey : Any]) -> Bool {
if let scheme = url.scheme {
if scheme == "http" {
// 添加 ATS 例外
AppTransportSecurity.default.allowArbitraryLoads = true
}
}
return true
}
- 重新设计 App 内网页
开发人员可以重新设计 App 内网页,使其不再依赖于用户代理设置。这是一种较为彻底的解决方案,但可能需要大量的工作。
常见问题解答
- 为什么 iOS 17.2 中不再支持 NSUserDefaults 用户代理设置?
为了提高安全性,Apple 弃用了 NSUserDefaults 用户代理设置。
- 有哪些可以使用 WKWebView 来设置自定义的用户代理的替代方案?
可以使用 stringByEvaluatingJavaScriptFromString() 方法。
webView.evaluateJavaScript("navigator.userAgent = 'Mozilla/5.0 (iPhone; CPU iPhone OS 17_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.2 Mobile/15E148 Safari/604.1'", completionHandler: nil)
- 为什么 ATS 要求在 iOS 17.2 中变得更加严格?
为了提高安全性,Apple 强制实施了 ATS,要求网站使用 TLS 加密。
- 如何为 ATS 添加例外?
可以在 Info.plist 文件中添加 "NSAppTransportSecurity" 键,并将其设置为 "NSAllowsArbitraryLoads" 为 "YES" 的字典。
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>
- 有哪些最佳做法可以遵循以解决 iOS 17.2 中的用户代理设置问题?
- 尽量使用 WKWebView 来设置自定义的用户代理。
- 谨慎使用 ATS 例外。
- 重新设计 App 内网页,使其不再依赖于用户代理设置。