不安全的 WebView 获取¶
ID: swift/unsafe-webview-fetch
Kind: path-problem
Security severity: 6.1
Severity: warning
Precision: high
Tags:
- security
- external/cwe/cwe-079
- external/cwe/cwe-095
- external/cwe/cwe-749
Query suites:
- swift-code-scanning.qls
- swift-security-extended.qls
- swift-security-and-quality.qls
在没有限制基本 URL 的情况下在 web 视图中获取数据可能会允许攻击者访问敏感的本地数据,例如使用 file://
。然后可以使用攻击者控制的机器的 URL 从软件中提取数据。更一般地说,攻击者可以使用他们控制下的 URL 作为跨站点脚本攻击的一部分。
推荐¶
在将 HTML 加载到 web 视图时,始终将 baseURL
设置为您控制的适当 URL 或 about:blank
。不要使用 nil
,因为这不会限制可以解析的 URL。也不要使用可能被攻击者控制的 baseURL
。
示例¶
在以下示例中,对 UIWebView.loadHTMLString
的调用将 baseURL
设置为 nil
,这不会限制可以从网页中解析的 URL。
let webview = UIWebView()
...
webview.loadHTMLString(htmlData, baseURL: nil) // BAD
为了解决这个问题,我们将 baseURL
设置为 about:blank
。这确保攻击者无法解析指向本地文件系统或其控制下的 Web 服务器的 URL。
let webview = UIWebView()
...
webview.loadHTMLString(htmlData, baseURL: URL(string: "about:blank")) // GOOD