OWASP 类别: MASVS-CODE:代码质量
概述
WebView 是 Android 应用中嵌入式浏览器组件,用于在应用中显示网络内容。它在应用的用户界面中呈现 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()
方法时,请确保检查传递给它们的所有 URL。如前所述,传递给 WebView 的任何 JavaScript 只能来自预期的域,因此验证正在加载的内容非常重要。
查阅OWASP的输入验证文档以及这份关于WebView的Android安全清单,获取良好的建议和示例。
设置WebView的安全文件访问设置
确保文件不可访问可以防止在WebView中执行任意JavaScript代码。在保护文件访问时,应考虑以下WebSettings
。
- 禁用文件访问。默认情况下,在API级别29及以下版本中,
setAllowFileAccess
设置为True
,这将允许访问本地文件。在API级别30及以上版本中,默认值为False
。为确保不允许文件访问,请显式将setAllowFileAccess
设置为False
。 禁用内容访问。
setAllowContentAccess
的默认设置为True
。内容URL访问允许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的URL是否存在网络钓鱼或恶意域名。
<meta-data android:name="android.webkit.WebView.EnableSafeBrowsing"
android:value="true" />
资源
- 安全浏览文档
- WebView 开发者参考
- WebView 的 WebSettings 开发者参考
- setAllowFileAccess 开发者文档
- setAllowContentAccess 开发者参考