Autenticar la aplicación HTML5 envuelta con Phonegap (o equivalente)

¿Hay alguna manera, usando JavaScript solamente (lado del cliente), para asegurarse de que una solicitud HTTP realmente viene de mi aplicación Phonegap?
Tenga en cuenta: no estoy hablando de autenticar al usuario , sino, en cierto sentido, de autenticar la aplicación en sí . No hay (y no debe ser) ningún tipo de interacción del usuario relacionada con esto.
Ni siquiera hablar de confidencialidad de la comunicación (no estoy usando HTTPS y la carga útil no está encriptada).

Mi conjetura es, al final, esto inevitablemente requiere algún tipo de clave codificada .
El problema es, como se puede ver por ejemplo aquí , tal clave sería accesible por casi cualquier persona – y este problema surge no sólo con activos de JavaScript, sino también con Java en Android.

Si no hay manera con Phonegap o cualquier plugin de Cordova, ¿podría sugerir un marco equivalente (o un entorno como Icenium) que podría hacer esta cosa posible?
O, por fin, ¿habría riesgo real de no tomar esta precaución para el escenario mencionado?

EDIT: Kurt Du Bois me recordó que no mencioné la autenticación de cliente SSL. Sea aplicable / conveniente o no, siempre termina hasta el problema de mantener una clave privada secreta. Encuentro que esto está bien descrito aquí , y resumido en la oración: "la seguridad de que la clave no se ha exportado es tan fuerte como la propia tienda de claves".

5 Solutions collect form web for “Autenticar la aplicación HTML5 envuelta con Phonegap (o equivalente)”

Una aplicación es una pieza de software, no un objeto tangible. La única manera de autenticarlo es si esa pieza de software contiene algún tipo de secreto. Desde el servidor, para autenticar un cliente, solicita que el cliente demuestre que conoce el secreto.

Si permite que cualquiera descargue su aplicación, los datos que contenga no son secretos. Por lo tanto, no puede autenticar su aplicación.

Lo que puedes hacer es hacer que el secreto sea más difícil de extraer, con técnicas de ofuscación. La ofuscación bien hecha es muy difícil: añadir meses-hombre a su esfuerzo de desarrollo si tienen algún beneficio. Si todavía puede usar un depurador, lo está haciendo mal. La ofuscación hecha mal significa esfuerzo desperdiciado. El esfuerzo ofuscado significa añadir días o semanas de trabajo a alguien para extraer el secreto. Usted necesita preguntarse si realmente vale la pena. Fundamentalmente, la ofuscación es ocultar la llave bajo el felpudo. O detrás de la maceta si te sientes elegante.

Vea también algunas preguntas similares sobre el Security Stack Exchange : ¿Cómo almacenar una clave RSA privada para una aplicación? ; Almacenamiento de clave asimétrica privada en la aplicación binaria?

Para ello, debe comenzar con una buena definición de lo que significa ejecutar su aplicación. Resulta que esto no es trivial, pero no voy a aburrir a todo el mundo con una discusión de ello.

Si ejecuta su aplicación significa participar en algún proceso con un comportamiento equivalente a lo que usted pretende (la definición de cuadro negro), puede resolver parcialmente este problema "sombreando" el cálculo realizado en el cliente (de forma intermitente o constante) y verificando los resultados, Dados los mismos insumos. Ni siquiera pensar en hacer eso para la criptografía, pero funciona bastante bien para cosas como los juegos donde se puede periódicamente auditar el comportamiento del cliente dado la entrada del usuario.

También puede introducir comportamientos extraños en una aplicación (por ejemplo, crear un sprite invisible en un juego que, si está dirigido a la interacción por el cliente, indica un cliente modificado).

Se ha hecho mucho trabajo en este tipo de cosas en el mundo del juego anti-tramposo, no todos los cuales implica la comprobación del medio ambiente.

¿Qué pasa con trabajar en un nivel superior: la comunicación clave pública / privada. De esta manera usted puede tener una conexión cifrada SSL y nunca tiene que hacer la autenticación necesaria.

Posible inconveniente de esta forma de trabajar es que usted tiene que generar una nueva clave cuando su teléfono es robado o cuando usted compra una nueva.

No sé, cómo hacer esto, pero tengo una idea y sólo compartir con usted. HTMl DOM es convertido por Web IDL mientras se ejecuta en el navegador web.

Trate de html5 archivo a WEB IDL y tratar de encontrar la manera de cifrar. Porque también busco esto por mucho tiempo. No puedo el camino. El validador en línea de WEB IDL es http://www.w3.org/2009/07/webidl-check

No sé esto posible o no, Vamos a intentar, si he encontrado alguna solución en relación con esto, le permiten saber.

Los estrictos requisitos de Seguridad son muy comunes en muchos negocios verticales. Me pareció que la aplicación Android es vulnerable a las amenazas si no se siguen las directrices adecuadas. Para asegurar el mecanismo de seguridad confiable con el control completo sobre la seguridad que había hecho después de mi proyecto.

Para ir sobre la seguridad de mi aplicación en HTML5 paradigma. Yo había hecho lo siguiente.

  1. Codificado el html y javascripts en archivos separados. Nos aseguramos de que el código html no habría incorporado javascript. (Por lo menos no tendría script java sensible)

  2. Escribió un programa externo de java para cifrar todos los archivos javascript con clave compleja. (He utilizado el algoritmo SHA2). En la versión de lanzamiento, los javascripts cifrados se incluyen en la carpeta de activos.

  3. Creó un programa basado en JNI para almacenar la clave en una variable y proporcionó el método para recuperar esta clave.

  4. Escrito método conveniente en Native Android para hacer lo siguiente

    • Abra el archivo Html.
    • Leer archivo Html en htmlBuffer.
    • Buscar etiquetas de secuencia de comandos.
    • Lea el archivo javascript especificado en la etiqueta de script en javaScriptBuffers [].
    • Obtenga la clave compleja de .so con JNI. (Véase el paso 3)
    • Descifrar todos los javascripts cifrados en javaScriptBuffers []. Compruebe si javascript particular está cifrado o no antes de descifrarlo.
    • Reemplace las etiquetas de Script con el javascript real de javaScriptBuffers [] en htmlBuffer.
    • Cargar el archivo html en la vista web.

Las normas de codificación se siguieron estrictamente.

La seguridad puede ser aún más fuerte por los HTML cifrados también y luego cambiar el mecanismo de descifrado en JNI.

Mi aplicación ha superado la estricta evaluación de seguridad con el método anterior.

En resumen, yo no dependía de ningún marco, pero desarrolló un pequeño marco por mí mismo en el que tengo el 100% de control. No tomó mucho tiempo una vez que el diseño fue entendido correctamente y los desarrolladores fueron entrenados en dos sesiones.

El equipo de android y el equipo de IOS trabajaron en paralelo para asegurarse de que la parte nativa de la codificación se ha cuidado para ambas plataformas. En IOS, no necesitamos utilizar cifrado y descifrado para pasar la prueba de cumplimiento de seguridad del cliente.

El desarrollo de la primera aplicación tardó poco más, pero una vez que el marco en su lugar, las aplicaciones siguientes eran sólo para codificar html y javascript y seguir el proceso de liberación correcta antes de la producción.

  • Android RSA Generación de pares de claves - ¿Debo usar Java estándar / Bouncy Castle / Spongy Castle / JSch / Other?
  • ¿El almacenamiento de la sal junto con el archivo cifrado romper la seguridad?
  • Secretos de OAuth en aplicaciones para móviles
  • Cómo jugar tonos DTMF en android a través de auriculares programatically?
  • Esquema de autenticación para una aplicación de Android: cuando la tarjeta SIM está bloqueada o cambiada por otra, la aplicación deja de funcionar
  • ¿Hay análogos javax.smartcardio en Android?
  • Proguarding Android Apps - lo esencial es (especialmente en relación con los pagos en la aplicación)
  • ¿Cómo puedo evitar que otras aplicaciones de iOS / Android utilicen mi API RESTful?
  • Cómo proteger mi aplicación contra la piratería
  • Restringir solicitudes de API solo a mi propia aplicación para móviles
  • Xamarin Código de Seguridad
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.