MASTG-TEST-0032: 测试WebView协议处理程序
已弃用测试
此测试已**弃用**,不应再使用。**原因**:MASTG V2 中提供新版本
请查看以下涵盖此 v1 测试的 MASTG v2 测试
概述¶
为了测试WebView协议处理程序(或资源访问),请检查应用程序的WebView使用情况,并评估WebView是否应该拥有资源访问权限。如果资源访问是必要的,您需要验证其是否按照最佳实践实现。
静态分析¶
检查源代码中的WebView使用情况。以下WebView设置控制资源访问:
setAllowContentAccess
:内容URL访问允许WebView从系统上安装的内容提供器加载内容,此功能默认启用。setAllowFileAccess
:启用和禁用WebView内的文件访问。针对Android 10 (API级别29)及以下版本时,默认值为true
;针对Android 11 (API级别30)及以上版本时,默认值为false
。请注意,这仅启用和禁用文件系统访问。资产和资源访问不受影响,并且可以通过file:///android_asset
和file:///android_res
进行访问。setAllowFileAccessFromFileURLs
:允许或不允许在文件方案URL上下文中运行的JavaScript访问来自其他文件方案URL的内容。对于Android 4.0.3 - 4.0.4 (API级别15)及以下版本,默认值为true
;对于Android 4.1 (API级别16)及以上版本,默认值为false
。setAllowUniversalAccessFromFileURLs
:允许或不允许在文件方案URL上下文中运行的JavaScript访问来自任何源的内容。对于Android 4.0.3 - 4.0.4 (API级别15)及以下版本,默认值为true
;对于Android 4.1 (API级别16)及以上版本,默认值为false
。
如果上述一个或多个方法被激活,您应该确定这些方法对于应用程序正常运行是否真正必要。
如果可以识别WebView实例,请查明本地文件是否通过loadURL
方法加载。
WebView = new WebView(this);
webView.loadUrl("file:///android_asset/filename.html");
必须验证HTML文件加载的来源位置。例如,如果文件从外部存储加载,则该文件可被所有人读写。这被认为是一种不良实践。相反,文件应放置在应用程序的assets目录中。
webview.loadUrl("file:///" +
Environment.getExternalStorageDirectory().getPath() +
"filename.html");
应检查loadURL
中指定的URL是否存在可被操纵的动态参数;对这些参数的操纵可能导致本地文件包含漏洞。
如适用,请使用以下代码片段和最佳实践来停用协议处理程序:
//If attackers can inject script into a WebView, they could access local resources. This can be prevented by disabling local file system access, which is enabled by default. You can use the Android WebSettings class to disable local file system access via the public method `setAllowFileAccess`.
webView.getSettings().setAllowFileAccess(false);
webView.getSettings().setAllowFileAccessFromFileURLs(false);
webView.getSettings().setAllowUniversalAccessFromFileURLs(false);
webView.getSettings().setAllowContentAccess(false);
- 创建一个列表,定义允许加载的本地和远程网页及协议。
- 创建本地HTML/JavaScript文件的校验和,并在应用程序启动时进行检查。压缩JavaScript文件以使其更难阅读。
动态分析¶
要识别协议处理程序的使用情况,在使用应用程序时,寻找触发电话呼叫和从文件系统访问文件的方法。