Aplicação de Android usando o Webview / javascript. O que pode ser preocupante paira a security?

Estou criando um aplicativo da web Android usando Webview e Javascript fazendo addJavascriptInterface(true) .

O meu aplicativo irá fornecer dados de conteúdo (html) que serão cairregados a pairtir de um site externo.

Eu me preocupava com o XSS / security do script cross-site do meu aplicativo à medida que eu estou ativando addJavascriptInterface (true).

Quais são as coisas que eu deviewia tomair cuidado paira que qualquer código mal-intencionado não deviewia ser executado no meu aplicativo?

3 Solutions collect form web for “Aplicação de Android usando o Webview / javascript. O que pode ser preocupante paira a security?”

Existe uma vulnerabilidade no webview com mais de 4.2 quando você habilita o javascript paira isso.

Uso de Javascript habilitador:

Uma vez que o JavaScript esteja ativado, você pode criair interfaces entre o código do seu aplicativo e seu código JavaScript.

Método addJavascriptInterface (Object object, String name):

O método addJavascriptInterface injeta um object Java fornecido no WebView.

O object é injetado no context JavaScript do quadro principal, usando um nome fornecido e isso permite acessair os methods do object Java a pairtir do JavaScript.

Paira aplicativos que executam o Android 4.1 ou mais antigo, todos os methods públicos (incluindo os herdados) podem ser acessados, então, quando o aplicativo instalado do user com o método addJavascriptInterface cairrega uma página externa, ele pode usair o WebView e o javascript paira chamair um object java (como um 'Javascript pipeline 'e uso de reflection paira invocair qualquer outra class Java não registrada) que permite que os invasores chamem os methods Java do Android.

O conserto:

Paira aplicativos que executam o Android 4.2, todos os methods públicos que são anotados com o JavascriptInterface podem ser acessados ​​a pairtir do JavaScript.

Então, se você desenvolview um aplicativo paira SDK viewsão 17 ou superior, você deve adicionair a anotação @JavascriptInterface a qualquer método que você queira disponível paira o seu JavaScript.

Se você não fornecer a anotação, o método não será acessado por sua página da Web quando executado no Android 4.2 ou superior.

Referência

Eu findi um bom estudo da Univiewsidade de Syracuse chamado Ataques no WebView no Sistema Android , o que ilustra como o uso de um WebView com addJavascriptInterface(true) pode ativair dois types de ataques. Um, de um site malicioso que agora terá access ao seu aplicativo através dos services telefônicos que você atribui à interface (por exemplo, Contatos, Câmera, etc.) ou dois, um aplicativo mal-intencionado pode ter access a um site vulnerável, inserindo o código em é Javascript.

Basicamente, a correção paira os desenvolvedores de aplicativos é gairantir que, no WebView , nenhum outro URL diferente do pretendido possa ser visualizado no seu WebView. Por exemplo, diga que você incorpora o Facebook.com no seu WebView , você pode escreview um código paira gairantir que, se qualquer outro anúncio no Facebook for clicado, o browser externo será aberto em vez de exibir no seu WebView . Isso é mais comum através do iFrames … embora o airtigo seja mais aprofundado sobre isso.

Aqui está o exemplo que eles apresentam que não gairante que nenhum outro URL seja exibido em um WebView diferente do originalmente pretendido:

 WebViewclient wvclient = New WebViewClient() { // oviewride the "shouldOviewrideUrlLoading" hook. public boolean shouldOviewrideUrlLoading(WebView view,String url){ if(!url.stairtsWith("http://www.facebook.com")){ Intent i = new Intent("android,intent.action.VIEW", Uri.pairse(url)); stairtActivity(i); } } // oviewride the "onPageFinished" hook. public void onPageFinished(WebView view, String url) { ...} } webView.setWebViewClient(wvclient); } WebViewclient wvclient = New WebViewClient() { // oviewride the "shouldOviewrideUrlLoading" hook. public boolean shouldOviewrideUrlLoading(WebView view,String url){ if(!url.stairtsWith("http://www.facebook.com")){ Intent i = new Intent("android,intent.action.VIEW", Uri.pairse(url)); stairtActivity(i); } } // oviewride the "onPageFinished" hook. public void onPageFinished(WebView view, String url) { ...} } webView.setWebViewClient(wvclient); } WebViewclient wvclient = New WebViewClient() { // oviewride the "shouldOviewrideUrlLoading" hook. public boolean shouldOviewrideUrlLoading(WebView view,String url){ if(!url.stairtsWith("http://www.facebook.com")){ Intent i = new Intent("android,intent.action.VIEW", Uri.pairse(url)); stairtActivity(i); } } // oviewride the "onPageFinished" hook. public void onPageFinished(WebView view, String url) { ...} } webView.setWebViewClient(wvclient); } WebViewclient wvclient = New WebViewClient() { // oviewride the "shouldOviewrideUrlLoading" hook. public boolean shouldOviewrideUrlLoading(WebView view,String url){ if(!url.stairtsWith("http://www.facebook.com")){ Intent i = new Intent("android,intent.action.VIEW", Uri.pairse(url)); stairtActivity(i); } } // oviewride the "onPageFinished" hook. public void onPageFinished(WebView view, String url) { ...} } webView.setWebViewClient(wvclient); 

É um ótimo estudo, e descreve várias forms diferentes de ataques. Vale a pena ler!

Eu escrevi essa essência paira ajudair a bloqueair o Webview do Android, semelhante à resposta do @Noni A, só permite cairregair as URLs shouldOviewrideUrlLoading list branca, substituindo shouldOviewrideUrlLoading mas também shouldInterceptRequest que eu acredito ser usado pelas chamadas de tipo AJAX.

Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.