javascript - studio - permisos peligrosos android
Aplicación de Android utilizando Webview/javascript. ¿Qué puede ser la preocupación de seguridad? (3)
Estoy creando una aplicación web para Android usando Webview
y Javascript
haciendo addJavascriptInterface(true)
.
Mi aplicación contendrá datos de contenido (html) que se cargarán desde un sitio externo.
Me preocupé por el XSS / seguridad de las aplicaciones en sitios cruzados, ya que habilito addJavascriptInterface (verdadero).
¿Cuáles son las cosas que debería tener cuidado para que no se ejecute ningún código malicioso en mi aplicación?
Encontré un buen estudio de Syracuse University llamado Attacks on WebView en el sistema Android , que ilustra cómo el uso de WebView
con addJavascriptInterface(true)
puede habilitar dos tipos de ataques. Uno, desde un sitio web malintencionado que ahora tendrá acceso a su aplicación a través de los servicios telefónicos que asigna a la interfaz (por ejemplo, Contactos, Cámara, etc.) o dos, una aplicación maliciosa puede tener acceso a un sitio web vulnerable, insertando el código en su Javascript.
Básicamente, la solución para los desarrolladores de aplicaciones es asegurarse de que, en WebView
, no se permita ver ninguna otra URL que no sea la prevista en su WebView. Por ejemplo, digamos que incrusta Facebook.com en su WebView
, puede escribir código para asegurarse de que si se hace clic en cualquier otro anuncio en Facebook, se abrirá el navegador externo en lugar de mostrarlo en su WebView
. Esto es más común a través de iFrames ... aunque el artículo profundiza más en eso.
Aquí está el ejemplo que presentan que asegura que no se vea ninguna otra URL en una vista WebView
no sea la originalmente diseñada:
WebViewclient wvclient = New WebViewClient() {
// override the "shouldOverrideUrlLoading" hook.
public boolean shouldOverrideUrlLoading(WebView view,String url){
if(!url.startsWith("http://www.facebook.com")){
Intent i = new Intent("android,intent.action.VIEW",
Uri.parse(url));
startActivity(i);
}
}
// override the "onPageFinished" hook.
public void onPageFinished(WebView view, String url) { ...}
}
webView.setWebViewClient(wvclient);
Es un gran estudio y describe varias formas diferentes de ataques. Vale la pena leerlo!
Escribí esta gist para ayudar a bloquear la vista web de Android, similar a la respuesta de @Noni A, solo permite cargar para las shouldOverrideUrlLoading
en la lista blanca mediante la anulación de la shouldOverrideUrlLoading
pero también la shouldInterceptRequest
que creo que es utilizada por las llamadas de tipo AJAX.
Existe una vulnerabilidad en la vista web anterior a 4.2 cuando habilita javascript para ello.
Uso de habilitar Javascript:
Una vez que JavaScript esté habilitado, puede crear interfaces entre el código de su aplicación y su código JavaScript.
Método addJavascriptInterface (objeto objeto, nombre de cadena):
El método addJavascriptInterface inyecta un objeto Java suministrado en WebView.
El objeto se inyecta en el contexto de JavaScript del marco principal, utilizando un nombre proporcionado, lo que permite acceder a los métodos del objeto Java desde JavaScript.
Para aplicaciones que ejecutan Android 4.1 o anterior, se puede acceder a todos los métodos públicos (incluidos los heredados), por lo que cuando una aplicación instalada por el usuario con el método addJavascriptInterface carga una página web externa, puede usar WebView y javascript para llamar a un objeto java (como un ''Javascript'' canalización y uso de la reflexión para invocar a cualquier otra clase de Java no registrada) que permita a los atacantes llamar a los métodos Java de Android.
La solución:
Para aplicaciones que ejecutan Android 4.2, se puede acceder a todos los métodos públicos que están anotados con JavascriptInterface desde JavaScript.
Entonces, si desarrolla una aplicación para SDK versión 17 o superior, debe agregar la anotación @JavascriptInterface a cualquier método que desee que esté disponible para su JavaScript.
Si no proporciona la anotación, su página web no podrá acceder al método cuando se ejecuta en Android 4.2 o superior.