¿Cómo puedo evitar que alguien se comunique con mi servidor, excepto mi aplicación de Android?
Tengo un servidor de descanso en el motor de aplicaciones de Google y sólo quiero que mi aplicación para poder hacer llamadas a mi servidor.
¿Hay una opción de seguridad que pueda activar en el motor de aplicaciones de Google que facilitará esto? Si no que qué puedo hacer?
- ¿Es posible tener un solo ensayo por dispositivo?
- ¿Cómo puedo administrar las transacciones de facturación en la aplicación en un servidor externo de forma segura?
- Verificación de facturación de Android en la aplicación
- ¿Por qué Android limita los tipos de archivos aceptables tan estrictamente mientras recibe a través de Bluetooth OPP?
- ¿Cómo afectan las recientes vulnerabilidades de java a Android y la programación?
Sé que puede restringir el acceso a algunas páginas con el siguiente, pero no estoy seguro de que se puede aplicar a las llamadas REST
<security-constraint> <web-resource-collection> <url-pattern>/cron/*</url-pattern> </web-resource-collection> <auth-constraint> <role-name>admin</role-name> </auth-constraint> </security-constraint>
- Cómo habilitar la opción AutoStart para mi aplicación en Xiaomi phone Security App programmatically en android
- Facturación en la aplicación de Android: Security.java dice "Error en la verificación de la firma"
- ¿Cómo proteger Google In-App Billing v3 contra la piratería de código?
- De android - CHANGE_COMPONENT_ENABLED_STATE
- Excepción de seguridad de Android al acceder a contactos
- Cómo proteger correctamente una aplicación que utiliza compras en la aplicación y DB local
- ¿Es el intercambio de archivos Bluetooth completamente seguro?
- ¿Cómo almacenar de forma segura las credenciales (contraseña) en la aplicación de Android?
Generar privatekey / publickey par en openssl. En la distribución de la aplicación, distribuya la clave pública. Tener una cabecera de http personalizada llamada appName y cifrar el nombre de la aplicación (un único número impredecible bit grande impredecible) y enviarlo. Asegúrese de que su código se obscurece para que nadie pueda ver el nombre de la aplicación. Entonces, dado que está encriptando incluso si alguien rastrea las llamadas http, el nombre de la aplicación estará visible como valor cifrado. En su extremo del servidor descifrar el appname usando la llave privada. Espero que esto ayude.
(Tres respuestas ya, y todas con diferentes ideas entonces la mía sobre este asunto – por lo que una buena pregunta, creo).
Era mi entendimiento que la manera recomendada / canónica de hacer esto (para google) es OATH2. Google ha reconocido que OATH2 es difícil, y uno de sus intentos de simplemente es los puntos finales de la nube, junto con Google Play Services para los clientes de Android. Las instrucciones para esto están aquí:
Tenga en cuenta que mientras los documentos hacen hincapié en la autenticación de usuario, también admite la autenticación de aplicaciones.
Lo que no sé (pero me gustaría) es cómo hacer lo mismo para una aplicación que no sea de puntos finales, así que supongo que esto es sólo una respuesta parcial.
Respuesta breve es, no se puede, por lo menos no completamente seguro.
Respuesta larga es, puede hacer que sea difícil para los hackers. Por lo general, esto funciona mediante la incrustación de una clave en la aplicación, ocultándolo, y ofuscando el código para obtener la clave. Esto no hace imposible que alguien encuentre la llave, simplemente más difícil.
Uno de los sistemas de consumo más fuertes por ahí es el Silverlight DRM de Microsoft, es posible que desee investigar cómo funciona: http://www.iis.net/learn/media/iis-media-services/content-protection-in-silverlight
Puede hacer que todos sus servicios REST requieran una clave de acceso y un secreto cuando se accede. La aplicación podría almacenarlos en la configuración y quedar en blanco cuando se envíe a la tienda de aplicaciones.
Luego, cuando descargue la aplicación, puede entrar en los ajustes de configuración e insertar la clave y el secreto que ha configurado para su servicio REST. (De esta forma se evita que cualquier persona acceda a los servicios, ya que agrega manualmente la clave + secreto que se utilizan)
Yo recomendaría configurar un registro IP de todos los intentos de acceso no autorizado en el servidor para que pueda crear una lista negra si alguien está enviando spam a su servicio web con intentos de acceso no válido.
Y entonces para colmo todo usted podría hacer esto todo sobre HTTPS.
Hay pocas opciones:
- En primer lugar se puede limitar por IP. Esta no es una buena manera si su aplicación Android obtiene IP dinámica cada vez.
- En segundo lugar usted puede utilizar algorigthm en el servidor y el cliente que sólo usted conocido. El servidor podría enviar los datos al cliente, el cliente ejecuta ese algoritmo y modificar los datos. A continuación, envía de nuevo al servidor. El servidor también ejecuta ese algoritmo y comprueba la respuesta. Si la respuesta es igual a lo que el servidor ha calculado, el servidor sabe que el cliente está autorizado. En ese caso, los datos iniciales que envían desde el servidor deben ser diferentes cada vez.
- En tercer lugar, puede utilizar algunas funciones de hash públicamente disponibles en lugar de su propio algoritmo. La idea es la misma. El servidor utiliza la misma función de hashing y comprueba si la respuesta del cliente es idéntica a su cálculo.
La forma canónica de hacerlo es usar SSL y certificados de cliente. No estoy seguro de si App Engine admite esto.
Tenga en cuenta, sin embargo, que si está distribuyendo su APK, entonces no puede confiar únicamente en algo distribuido con el APK – sería posible (si es bastante improbable, dependiendo de lo alto que sea su objetivo) Para extraer la información necesaria para falsificar la aplicación.
- ¿Las aplicaciones que no van a compartir necesitan el proveedor de contenido?
- No se puede importar ActionBar en Android App con compatibilidad con versiones anteriores