跳过内容

MASTG-TEST-0031: 测试 WebView 中的 JavaScript 执行

此测试即将更新

此测试目前可使用,但将作为新的 OWASP MASTG v2 指南 的一部分进行全面修订。

请提交 PR 来帮助我们:MASTG v1->v2 MASTG-TEST-0031: 在 WebView 中测试 JavaScript 执行 (android)

发送反馈

概述

要测试 WebView 中的 JavaScript 执行,请检查应用程序的 WebView 使用情况,并评估每个 WebView 是否应允许 JavaScript 执行。如果应用程序正常运行需要 JavaScript 执行,则需要确保应用程序遵循所有最佳实践。

静态分析

要创建和使用 WebView,应用程序必须创建 WebView 类的实例。

WebView webview = new WebView(this);
setContentView(webview);
webview.loadUrl("https://www.owasp.org/");

各种设置都可以应用于 WebView(激活/停用 JavaScript 就是一个例子)。默认情况下,WebView 的 JavaScript 处于禁用状态,必须显式启用。查找方法 setJavaScriptEnabled 以检查 JavaScript 是否激活。

webview.getSettings().setJavaScriptEnabled(true);

这允许 WebView 解释 JavaScript。 只有在必要时才应启用它,以减少应用程序的攻击面。如果 JavaScript 是必需的,则应确保

  • 与端点的通信始终依赖 HTTPS(或其他允许加密的协议)来保护 HTML 和 JavaScript 在传输过程中不被篡改。
  • JavaScript 和 HTML 仅从应用程序数据目录内部或受信任的 Web 服务器本地加载。
  • 用户无法通过基于用户提供的输入加载不同的资源来定义要加载的源。

要删除所有 JavaScript 源代码和本地存储的数据,请在应用程序关闭时使用 clearCache 清除 WebView 的缓存。

运行 Android 4.4(API 级别 19)之前版本的设备使用具有多个安全问题的 WebKit 版本。 作为一种解决方法,如果应用程序在这些设备上运行,则应用程序必须确认 WebView 对象 仅显示受信任的内容

动态分析

动态分析取决于操作条件。 有几种方法可以将 JavaScript 注入到应用程序的 WebView 中

  • 端点中存储的跨站点脚本漏洞;当用户导航到易受攻击的功能时,漏洞利用程序将发送到移动应用程序的 WebView。
  • 攻击者采取 中间人 (MITM) 位置,并通过注入 JavaScript 来篡改响应。
  • 恶意软件篡改 WebView 加载的本地文件。

为了解决这些攻击媒介,请检查以下内容

  • 端点提供的所有功能都应免受 存储的 XSS 的影响。
  • 只有应用程序数据目录中的文件才应在 WebView 中呈现(参见测试用例“测试 WebView 中本地文件包含”)。

  • 必须按照最佳实践实施 HTTPS 通信,以避免 MITM 攻击。 这意味着

    • 所有通信都通过 TLS 加密,
    • 证书已正确检查,和/或
    • 证书应被固定。