Call to dangerous WebView settings API
调用危险的 WebView 设置 API
描述
应用程序中使用的所有 WebView 方法的列表。
建议
为了缓解危险的 WebView API 使用:
主要防御 – 禁用混合内容:
原生 Android (Java):
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
webView.getSettings().setMixedContentMode(WebSettings.MIXED_CONTENT_NEVER_ALLOW);
}
Flutter(例如 flutter_inappwebview):
InAppWebViewSettings(mixedContentMode: MixedContentMode.MIXED_CONTENT_NEVER_ALLOW)
- 防止 HTTPS 页面加载不安全的 HTTP 资源
- 阻止通过注入脚本进行的中间人攻击
限制文件访问:
原生 Android (Java):
webView.getSettings().setAllowFileAccess(false);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
webView.getSettings().setAllowFileAccessFromFileURLs(false);
webView.getSettings().setAllowUniversalAccessFromFileURLs(false);
}
Flutter(例如 flutter_inappwebview):
InAppWebViewSettings(
allowFileAccess: false,
allowFileAccessFromFileURLs: false,
allowUniversalAccessFromFileURLs: false,
)
- 阻止对 file:// 协议方案的漏洞利用
- 防止本地文件和数据库泄露
加固 JavaScript 接口:
原生 Android (Java):
webView.removeJavascriptInterface("interfaceName"); // Remove if not needed
// If required, only expose minimal @JavascriptInterface methods
Flutter:
移除未使用的 JS 处理程序。如果需要,在 addJavaScriptHandler(flutter_inappwebview)或 JavascriptChannel(webview_flutter)中安全地限制逻辑。
- 避免通过 addJavascriptInterface() 执行远程代码
- 如果需要 JS 桥接,请使用 WebMessagePort 或将受信任的源添加到允许列表
其他保护措施:
- 在生产环境中禁用 WebView 调试: 原生 Android:
WebView.setWebContentsDebuggingEnabled(false);
Flutter(例如 flutter_inappwebview):
InAppWebViewSettings(isInspectable: false, debuggingEnabled: false)
- 启用安全浏览(API 26+): 原生 Android:
WebView.enableSafeBrowsing(context);
Flutter(例如 flutter_inappwebview):
InAppWebViewSettings(safeBrowsingEnabled: true)
通过禁用混合内容、限制文件访问并保护 JavaScript 桥接,您可以消除与危险的 WebView API 相关的主要攻击向量,同时确保应用程序的 WebView 功能安全。
链接
- DRD02-J. Do not allow WebView to access sensitive local resource through file scheme (CERT Secure Coding)
- DRD13. Do not provide addJavascriptInterface method access in a WebView which could contain untrusted content (CERT Secure Coding)
标准
- OWASP_MASVS_L1:
- MSTG_PLATFORM_6
- MSTG_PLATFORM_5
- OWASP_MASVS_L2:
- MSTG_PLATFORM_6
- MSTG_PLATFORM_5
- OWASP_MASVS_v2_1:
- MASVS_PLATFORM_2
- MASVS_PLATFORM_3
- OWASP_MOBILE_TOP_10:
- M8_2024