Skip to content

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:

  • shouldOverrideUrlLoading permite que seu aplicativo cancele o carregamento de WebViews com conteúdo suspeito retornando true ou permita que o WebView carregue a URL retornando false. 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, shouldInterceptRequest deve cuidar disso.
  • shouldInterceptRequest permite 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étodo shouldInterceptRequest sã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: ou blob:, ou para recursos acessados via URLs file:///android_asset/ ou file:///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 setSafeBrowsingWhitelist ou até mesmo ignorar o aviso através do callback onSafeBrowsingHit.

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.