MASTG-TEST-0037: Testando a Limpeza de WebViews
Visão Geral¶
Para testar a limpeza de WebViews)), você deve inspecionar todas as APIs relacionadas à exclusão de dados do WebView e tentar rastrear completamente o processo de exclusão de dados.
Análise Estática¶
Comece identificando o uso das seguintes APIs de WebView e valide cuidadosamente as melhores práticas mencionadas.
-
Inicialização: um aplicativo pode estar inicializando o WebView de forma a evitar o armazenamento de determinadas informações usando
setDomStorageEnabled,setAppCacheEnabledousetDatabaseEnableddeandroid.webkit.WebSettings. O DOM Storage (para usar o armazenamento local HTML5), os Application Caches e as APIs de Database Storage são desabilitados por padrão, mas os aplicativos podem definir essas configurações explicitamente como "true". -
Cache: a classe WebView do Android oferece o método
clearCache, que pode ser usado para limpar o cache de todos os WebViews utilizados pelo aplicativo. Ele recebe um parâmetro booleano de entrada (includeDiskFiles) que apagará todos os recursos armazenados, incluindo o cache da RAM. No entanto, se for definido como false, limpará apenas o cache da RAM. Verifique no aplicativo o uso do métodoclearCachee confirme seu parâmetro de entrada. Além disso, você também pode verificar se o aplicativo está substituindoonRenderProcessUnresponsivepara o caso em que o WebView pode ficar sem resposta, pois o métodoclearCachetambém pode ser chamado a partir desse ponto. -
APIs de WebStorage:
WebStorage.deleteAllDatatambém pode ser usado para limpar todo o armazenamento atualmente utilizado pelas APIs de armazenamento JavaScript, incluindo o Web SQL Database e as APIs de HTML5 Web Storage.Alguns aplicativos precisarão habilitar o DOM storage para exibir alguns sites HTML5 que usam armazenamento local. Isso deve ser investigado cuidadosamente, pois pode conter dados sensíveis.
-
Cookies: quaisquer cookies existentes podem ser excluídos usando CookieManager.removeAllCookies.
-
APIs de arquivo: a exclusão adequada de dados em determinados diretórios pode não ser tão direta; alguns aplicativos usam uma solução pragmática, que é excluir manualmente diretórios selecionados conhecidos por conter dados do usuário. Isso pode ser feito usando a API
java.io.File, comojava.io.File.deleteRecursively.
Exemplo:
Este exemplo em Kotlin do aplicativo open source Firefox Focus mostra diferentes etapas de limpeza:
override fun cleanup() {
clearFormData() // Remove o popup de preenchimento automático do campo de formulário atualmente focado, se presente. Observe que isso afeta apenas a exibição do popup de preenchimento automático, não remove nenhum dado de formulário salvo do armazenamento deste WebView. Para fazer isso, use WebViewDatabase#clearFormData.
clearHistory()
clearMatches()
clearSslPreferences()
clearCache(true)
CookieManager.getInstance().removeAllCookies(null)
WebStorage.getInstance().deleteAllData() // Limpa todo o armazenamento atualmente utilizado pelas APIs de armazenamento JavaScript. Isso inclui o Application Cache, o Web SQL Database e as APIs de HTML5 Web Storage.
val webViewDatabase = WebViewDatabase.getInstance(context)
// Não está totalmente claro como isso difere de WebView.clearFormData()
@Suppress("DEPRECATION")
webViewDatabase.clearFormData() // Limpa quaisquer dados salvos para formulários web.
webViewDatabase.clearHttpAuthUsernamePassword()
deleteContentFromKnownLocations(context) // chama FileUtils.deleteWebViewDirectory(context), que exclui todo o conteúdo em "app_webview".
}
A função termina com algumas exclusões manuais extras de arquivos em deleteContentFromKnownLocations, que chama funções de FileUtils. Essas funções usam o método java.io.File.deleteRecursively para excluir recursivamente arquivos dos diretórios especificados.
private fun deleteContent(directory: File, doNotEraseWhitelist: Set<String> = emptySet()): Boolean {
val filesToDelete = directory.listFiles()?.filter { !doNotEraseWhitelist.contains(it.name) } ?: return false
return filesToDelete.all { it.deleteRecursively() }
}
Análise Dinâmica¶
Abra um WebView acessando dados sensíveis e, em seguida, faça logout do aplicativo. Acesse o contêiner de armazenamento do aplicativo e certifique-se de que todos os arquivos relacionados ao WebView sejam excluídos. Os seguintes arquivos e pastas estão normalmente relacionados a WebViews:
- app_webview
- Cookies
- pref_store
- blob_storage
- Session Storage
- Web Data
- Service Worker