OWASP 类别:MASVS-CODE:代码质量
概览
WebView 是 Android 应用中的一种嵌入式浏览器组件, 便于在应用中显示 Web 内容。它可以呈现 HTML、CSS 和 应用界面中的 JavaScript
跨应用脚本攻击与在受害应用环境中执行恶意代码密切相关。在本文档中,我们将仅讨论将恶意 JavaScript 代码注入易受攻击的 WebView 的情况。
如果应用在没有进行充分验证或净化的情况下将恶意 JavaScript 接受到 WebView 中,则该应用容易受到跨应用脚本攻击。
影响
如果攻击者控制的 JavaScript 内容未经验证或清理就传递给易受攻击的应用的 WebView,攻击者便可以利用跨应用脚本漏洞。因此,攻击者提供的 JavaScript 代码会在受害应用的 WebView 上下文中执行。然后,恶意 JavaScript 代码可以使用与受害应用相同的权限,这可能会导致敏感用户数据被盗和账号被盗用。
缓解措施
停用 JavaScript
如果您的应用不需要 JavaScript,请停用它,以确保它不会成为威胁:
Kotlin
// Get the WebView Object
val webView = findViewById<WebView>(R.id.webView)
val webSettings = webView.settings
// Disable JavaScript
webSettings.javaScriptEnabled = false
Java
// Get the WebView Object
WebView webView = (WebView) findViewById(R.id.webView);
WebSettings webSettings = webView.getSettings();
// Disable JavaScript for the WebView
webSettings.setJavaScriptEnabled(false);
如果您的应用确实需要 JavaScript,请确保您拥有或控制传递给 WebView 的所有 JavaScript。避免允许 WebView 任意执行 JavaScript,请参阅下一部分中的指南。
确保仅将预期内容加载到 WebView
使用 shouldOverrideUrlLoading()
、loadUrl()
或 evaluateJavascript()
,
等方法时,请确保对传递给它们的所有网址进行检查。如前所述,传递给 WebView 的任何 JavaScript 都应
来自预期的域,因此请务必验证正在加载的内容。
如需获取实用建议和示例,请参阅 OWASP 的输入验证文档以及适用于 WebView 的此 Android 安全核对清单。
为 WebView 设置安全文件访问权限设置
确保文件无法访问可以阻止任意 JavaScript:
以下 WebSettings
应
在保障文件访问安全时考虑以下因素:
- 停用文件访问权限。默认情况下,系统会将
setAllowFileAccess
设为True
API 级别 29 及更低级别(将允许访问本地文件)。在 API 级别 30 及更高级别中,默认值为False
。为确保不允许访问文件,请将setAllowFileAccess
明确设置为False
停用内容访问权限。
setAllowContentAccess
的默认设置为True
。通过内容网址访问权限,WebView 可以从内容加载内容 提供程序。如果您的应用不需要内容访问权限, 将setAllowContentAccess
设为False
以防发生潜在的滥用行为, 跨应用脚本攻击kotlin
kotlin webView.settings.javaScriptEnabled = false webView.settings.domStorageEnabled = true webView.settings.allowFileAccess = false webView.settings.allowContentAccess = false
Java
java webView.getSettings().setJavaScriptEnabled(false); webView.getSettings().setDomStorageEnabled(true); webView.getSettings().setAllowFileAccess(false); webView.getSettings().setAllowContentAccess(false);
启用安全浏览功能
在 AndroidManifest.xml
中启用安全浏览功能,以扫描传递给
钓鱼式攻击或恶意网域的 WebView:
<meta-data android:name="android.webkit.WebView.EnableSafeBrowsing"
android:value="true" />
资源
- “安全浏览”文档
- WebView 开发者参考文档
- 适用于 WebView 的 WebSettings 开发者参考文档
- setAllowFileAccess 开发者文档
- setAllowContentAccess 开发者参考文档