跳过内容

MASTG-TEST-0027: 测试 WebView 中的 URL 加载

此测试即将更新

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

请提交 PR 来帮助我们:MASTG v1->v2 MASTG-TEST-0027:测试 WebViews 中的 URL 加载 (android)

发送反馈

概述

为了测试 WebViews 中的 URL 加载,您需要仔细分析处理页面导航,尤其是在用户可能能够离开受信任环境时。 Android 上默认且最安全的行为是让默认的网络浏览器打开用户可能在 WebView 中单击的任何链接。但是,可以通过配置 WebViewClient 来修改此默认逻辑,从而允许应用程序本身处理导航请求。

静态分析

检查页面导航处理覆盖

要测试应用程序是否通过配置 WebViewClient 来覆盖默认页面导航逻辑,您应该搜索并检查以下拦截回调函数

  • shouldOverrideUrlLoading 允许您的应用程序通过返回 true 来中止加载具有可疑内容的 WebView,或者通过返回 false 来允许 WebView 加载 URL。注意事项
    • 此方法不针对 POST 请求调用。
    • 此方法不针对 XmlHttpRequests、iFrame、HTML 中包含的 "src" 属性或 <script> 标签调用。相反,shouldInterceptRequest 应该处理此问题。
  • shouldInterceptRequest 允许应用程序从资源请求返回数据。如果返回值为空,则 WebView 将像往常一样继续加载资源。否则,将使用 shouldInterceptRequest 方法返回的数据。注意事项
    • 将为各种 URL 方案(例如,http(s):data:file: 等)调用此回调,而不仅仅是通过网络发送请求的那些方案。
    • 不会为 javascript:blob: URL,或者通过 file:///android_asset/file:///android_res/ URL 访问的资产调用此回调。对于重定向,仅针对初始资源 URL 调用此回调,而不针对任何后续重定向 URL 调用。
    • 启用 Safe Browsing 后,这些 URL 仍然会接受 Safe Browsing 检查,但开发人员可以使用 setSafeBrowsingWhitelist 允许该 URL,甚至可以通过 onSafeBrowsingHit 回调忽略警告。

如您所见,在测试配置了 WebViewClient 的 WebViews 的安全性时,有很多需要考虑的点,因此请务必通过查看WebViewClient 文档仔细阅读并理解所有这些点。

检查是否禁用 EnableSafeBrowsing

虽然 EnableSafeBrowsing 的默认值为 true,但某些应用程序可能会选择禁用它。要验证是否启用了 SafeBrowsing,请检查 AndroidManifest.xml 文件,并确保不存在以下配置

<manifest>
    <application>
        <meta-data android:name="android.webkit.WebView.EnableSafeBrowsing"
                   android:value="false" />
        ...
    </application>
</manifest>

动态分析

动态测试深层链接的一种便捷方法是使用 Frida 或 frida-trace,并在使用应用程序和单击 WebView 中的链接时挂钩 shouldOverrideUrlLoadingshouldInterceptRequest 方法。请务必还挂钩其他相关的 Uri 方法,例如 getHostgetSchemegetPath,这些方法通常用于检查请求并匹配已知模式或拒绝列表。