MASTG-TEST-0027: Teste de Carregamento de URL em WebViews
Visão Geral¶
Para testar o carregamento de URLs em WebViews), é necessário analisar cuidadosamente o tratamento de navegação de páginas, especialmente quando os usuários podem navegar para fora de um ambiente confiável. O comportamento padrão e mais seguro no Android é permitir que o navegador padrão abra qualquer link que o usuário clique dentro do WebView. No entanto, essa lógica padrão pode ser modificada através da configuração de um WebViewClient, que permite que as solicitações de navegação sejam tratadas pelo próprio aplicativo.
Análise Estática¶
Verificar a Substituição do Tratamento de Navegação de Página¶
Para testar se o aplicativo está substituindo a lógica padrão de navegação de página configurando um WebViewClient, você deve procurar e inspecionar as seguintes funções de callback de interceptação:
shouldOverrideUrlLoadingpermite que seu aplicativo cancele o carregamento de WebViews com conteúdo suspeito retornandotrueou permita que o WebView carregue a URL retornandofalse. Considerações:- Este método não é chamado para requisições POST.
- Este método não é chamado para XmlHttpRequests, iFrames, atributos "src" incluídos em HTML ou tags
<script>. Em vez disso,shouldInterceptRequestdeve cuidar disso.
shouldInterceptRequestpermite que o aplicativo retorne os dados de solicitações de recursos. Se o valor de retorno for nulo, o WebView continuará a carregar o recurso normalmente. Caso contrário, os dados retornados pelo métodoshouldInterceptRequestsão utilizados. Considerações:- Este callback é invocado para uma variedade de esquemas de URL (por exemplo,
http(s):,data:,file:, etc.), não apenas para aqueles esquemas que enviam solicitações pela rede. - Isso não é chamado para URLs
javascript:oublob:, ou para recursos acessados via URLsfile:///android_asset/oufile:///android_res/. - No caso de redirecionamentos, isso é chamado apenas para a URL do recurso inicial, não para quaisquer URLs de redirecionamento subsequentes.
- Quando o Navegação Segura (Safe Browsing) está ativado, essas URLs ainda passam por verificações do Navegação Segura, mas o desenvolvedor pode permitir a URL com
setSafeBrowsingWhitelistou até mesmo ignorar o aviso através do callbackonSafeBrowsingHit.
- Este callback é invocado para uma variedade de esquemas de URL (por exemplo,
Como pode ser visto, há muitos pontos a considerar ao testar a segurança de WebViews que possuem um WebViewClient configurado, portanto, certifique-se de ler e entender todos eles cuidadosamente verificando a Documentação do WebViewClient.
Verificar se o EnableSafeBrowsing está Desativado¶
Embora o valor padrão de EnableSafeBrowsing seja true, alguns aplicativos podem optar por desativá-lo. Para verificar se o Navegação Segura (SafeBrowsing) está ativado, inspecione o arquivo AndroidManifest.xml e certifique-se de que a configuração abaixo não esteja presente:
<manifest>
<application>
<meta-data android:name="android.webkit.WebView.EnableSafeBrowsing"
android:value="false" />
...
</application>
</manifest>
Análise Dinâmica¶
Uma maneira conveniente de testar dinamicamente a vinculação profunda (deep linking) é usar o Frida ou frida-trace e conectar (hook) os métodos shouldOverrideUrlLoading e shouldInterceptRequest enquanto utiliza o aplicativo e clica em links dentro do WebView. Certifique-se também de conectar outros métodos relacionados à classe Uri, como getHost, getScheme ou getPath, que são normalmente usados para inspecionar as solicitações e corresponder a padrões conhecidos ou listas de negação.