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
回调忽略警告。
- 将为各种 URL 方案(例如,
如您所见,在测试配置了 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 中的链接时挂钩 shouldOverrideUrlLoading
、shouldInterceptRequest
方法。请务必还挂钩其他相关的 Uri
方法,例如 getHost
、getScheme
或 getPath
,这些方法通常用于检查请求并匹配已知模式或拒绝列表。