跨应用脚本

OWASP 类别MASVS-CODE:代码质量

概览

WebView 是 Android 应用中的嵌入式浏览器组件,有助于在应用内显示网页内容。它会在应用的用户界面中呈现 HTML、CSS 和 JavaScript。

跨应用脚本攻击通常与在受害应用的环境中执行恶意代码有关。就本文档而言,主题将专门限定为将恶意 JavaScript 代码注入易受攻击的 WebView。

如果应用在没有进行充分验证或清理的情况下接受 WebView 中的恶意 JavaScript,则该应用容易受到跨应用脚本攻击。

影响

当攻击者控制的 JavaScript 内容在未经验证或清理的情况下传递给易受攻击的应用的 WebView 时,跨应用脚本漏洞可能会被利用。因此,攻击者提供的 JavaScript 代码会在受害应用的 WebView 环境中执行。然后,恶意 JavaScript 代码可以使用与受害应用相同的权限,这可能会导致敏感用户数据被盗和账号被盗用。

缓解措施

停用 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 设置安全的文件访问设置

确保文件不可访问可以防止在 WebView 中 执行任意 JavaScript。在确保文件访问安全时,应考虑以下 WebSettings

  • 停用文件访问权限。默认情况下,setAllowFileAccess 在 API 级别 29 及更低级别中设置为 True,这将允许访问本地文件。在 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" />

资源