Make Webview safer - some of the code based on recommendations in article https://labs.mwrinfosecurity.com/blog/2012/04/23/adventures-with-android-webviews/

May 14, 2014 ยท View on GitHub

/**

  • Implements whitelisting on host name */ public class SaferWebViewClient extends WebViewClient {

    private String[] hostsWhitelist;

    public SaferWebViewClient(String hostsWhitelsit){ super(); this.hostsWhitelist = hostsWhitelist; }

    @Override public WebResourceResponse shouldInterceptRequest(final WebView view, String url) { if (isValidHost(url)) { return super.shouldInterceptRequest(view, url); } else { return getWebResourceResponseFromString(); } }

    private WebResourceResponse getWebResourceResponseFromString() { return getUtf8EncodedWebResourceResponse(new StringBufferInputStream("alert('!NO!')")); }

    private WebResourceResponse getUtf8EncodedWebResourceResponse(InputStream data) { return new WebResourceResponse("text/css", "UTF-8", data); }

    @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { return isValidHost(url); }

    private boolean isValidHost(String url){ if (!TextUtils.isEmpty(url)) { final String host = Uri.parse(url).getHost(); for (String whitelistedHost: hostsWhitelist){ if (whitelistedHost.equalsIgnoreCase(host)){ return true; } } } return false; }

}