¿Cómo permito que solo la aplicación vea / descargue archivos del servidor?

1

Tengo una aplicación para Android que carga y descarga imágenes de mi servidor dedicado. Sin embargo, antes de que comience a funcionar, quiero saber si hay alguna forma de asegurar el servidor para que solo mi aplicación pueda acceder y ver los archivos que contiene. La aplicación actualmente obtiene los archivos del servidor a través de una URL. Estos archivos son confidenciales y no me gustaría que fueran visibles para todos.

Hay alguna manera de establecer un bloqueo de nombre de usuario y contraseña en los directorios del servidor y, en caso afirmativo, ¿cómo puedo permitir que mi aplicación de Android abra estos directorios?

    
pregunta Advait S 26.07.2015 - 05:30
fuente

4 respuestas

1

Estás haciendo dos preguntas (te estoy parafraseando ...)

  

¿Puedo permitir que solo mi aplicación acceda a mi servidor?

No, esto es imposible. No puedes controlar al cliente. Teléfono de la raíz Iniciar el depurador. Consigue tu llave. Crea tu propia aplicación con tu llave.

  

¿Cómo aseguro mi servidor?

Use un marco de seguridad para su servidor de aplicaciones. Si, por ejemplo, está utilizando Java Spring, podría usar Spring Security, que maneja la autenticación y la autorización.

    
respondido por el Neil McGuigan 26.07.2015 - 22:46
fuente
0
  

"¿Puedo permitir que solo mi aplicación acceda a mi servidor?"

Sí, es posible restringir el acceso al cliente. No sabía esto en aquel entonces, pero es posible controlar quién puede acceder a los archivos almacenados en un servidor mediante la autenticación de encabezado HTTP / HTTPS, que requiere un combo de "username: password" codificado en base64 en el encabezado de la solicitud para obtener el archivo (HTML , IMAGEN etc.)

Y para evitar el rastreo de encabezados, la sugerencia de Milen de usar un certificado HTTPS es el camino a seguir porque HTTPS encripta todo usando la clave pública del sitio (incluidos los encabezados).

Entonces, ¿cómo debería haber implementado esto?

En el lado de Android, cree una aplicación que envíe un nombre de usuario y una contraseña únicos cada vez que deba buscarse el documento / imagen / archivo.

En el lado del servidor, configure un script de servidor en PHP, o Python, o lo que esté usando (más conveniente que usar .htaccess para restringir el acceso a los archivos en apache) que base64 decodifica el nombre de usuario y la contraseña de la solicitud, comprueba si hay una coincidencia correcta, envía el encabezado de tipo de contenido correcto junto con el archivo.

Esperemos que esta información sea suficiente para quien la necesite. Aunque no terminé probando esto, espero que funcione.

Ninguna de las otras respuestas aquí es mayormente correcta, pero creo que cada una contribuyó de alguna manera para encontrar una solución a esta pregunta.

    
respondido por el Advait S 11.09.2016 - 01:50
fuente
-1

Pase su nombre de usuario y contraseña al servidor desde la APLICACIÓN a través de HTTPS y compare el hash de la contraseña con el hash almacenado en el servidor con ese nombre de usuario. Siga las precauciones 'habituales':

  • use un hash fuerte en el servidor (por ejemplo, SHA256)

  • use un salt con la contraseña (cualquier cadena verdaderamente aleatoria será suficiente)

  • use una contraseña segura (diga al menos 10 caracteres con mayúsculas y minúsculas, números y puntuación)

  • ponga un pequeño retraso en el error de autenticación (por ejemplo, haga que el servidor se "duerma" durante 4 o 5 segundos antes de informar un error de autenticación, para evitar los ataques de fuerza bruta de serie)

  • supervise si hay varios intentos fallidos de inicio de sesión y alerta / investigue los intentos de abuso y, si es posible, bloquee temporalmente las IP de origen en su arquitectura.

Luego puede devolver un token de sesión con una duración de tiempo limitada adjunta, o simplemente solicitar el par de nombre de usuario / contraseña con cada APP al mensaje del servidor.

Estas son formas probadas y comprobadas de administrar este proceso.

    
respondido por el David Scholefield 26.07.2015 - 09:57
fuente
-2
  1. Use HTTPS: un certificado decente es como $ 10, así que no hay excusas :-)
  2. No invente sus propios mecanismos de autenticación / autorización. Utilice lo que las personas más inteligentes han desarrollado, probado, evaluado y probado de nuevo. Un buen punto de partida es evaluar OAuth .
respondido por el Milen 26.07.2015 - 09:04
fuente

Lea otras preguntas en las etiquetas