¿Cómo evitar que usuarios no autorizados accedan a una imagen en mi servidor solo por URL?

1

Tengo algunas imágenes generadas dinámicamente en mi servidor (de alto valor comercial), que se supone que solo se pueden ver a través de nuestra aplicación móvil. La imagen simplemente se carga desde la URL como PNG. ¿Cómo puedo evitar que las personas accedan a la misma imagen utilizando la URL (si la encuentran)?

Podría usar un script PHP que requiera un token para servir la imagen (en lugar de acceder directamente). Pero si alguien va e invierte la aplicación móvil, también se puede encontrar el token. Podría intentar ocultarlo muy bien, pero ¿no hay otra solución mejor?

    
pregunta Primož Kralj 21.11.2018 - 08:38
fuente

3 respuestas

1

Tienes que trabajar con esas imágenes de la misma manera que debería ser para contenido restringido. Hay dos puntos principales:

  1. Proteger el acceso al contenido (las imágenes)
  2. Proteger el contenido contra la fuerza bruta para no permitir que el usuario adivine la ruta de la imagen.

Los dos puntos podrían cubrirse con una solicitud de proxy a través de un script php. El primer punto se puede resolver con contenido de autenticación y protección con un token y ACL (nivel de control de acceso). Asegúrese de que las imágenes fuera de la visibilidad del servidor web no accedan a la imagen directamente. Podría ser útil cambiar el nombre de la imagen después de cargarla y guardar el nombre original y el nuevo nombre en la base de datos. En este caso, puede llamarlo desde la aplicación por su nombre original y acceder a él por un nuevo nombre real único.

    
respondido por el Aleksandr Ryabov 21.11.2018 - 19:21
fuente
1

Una respuesta para el título de la pregunta: solo necesita un nombre de usuario y contraseña y verifique la autorización del usuario antes de enviar la imagen.

Una respuesta para el cuerpo de la pregunta / comentarios: como menciona ChatterOne en los comentarios, siempre que haya un acceso gratuito a la aplicación, no hay forma de evitar que una persona determinada la descargue.

Básicamente, vender / proporcionar los datos en bruto no es el camino a seguir. Vender un servicio es. Mientras mantengas tu aplicación tal como está, perderá los datos tarde o temprano. Mientras esté evolucionando constantemente, ofreciendo más análisis basados en los datos, más servicios, más satisfacción del cliente, las sanguijuelas de los datos siempre quedarán atrás.

    
respondido por el Your Common Sense 22.11.2018 - 08:24
fuente
0

Aquí hay algunas ideas.

  1. Todo tiene que ser SSL TLS v1.2 +
  2. Sería mejor tener un nombre de usuario / contraseña
  3. Al tener éxito en el registro, el usuario obtiene un código 64 bytes aleatorios o más
  4. La solicitud se modifica, así que en lugar de enlace tiene enlace 64 bytes aleatorios o más / archivo
  5. El código caduca cuando el usuario cierra la sesión o se basa en el tiempo
  6. La base de tiempo es más segura, y la aplicación puede obtener un nuevo código cada 5 minutos
  7. Cada código está vinculado internamente a una dirección IP, y el usuario tiene que volver a iniciar sesión si cambia.
  8. Cualquier IP que envíe un token de 64 bits falso está prohibida. decir 20 minutos.

Si MITM el certificado SSL y el paquete volcaron el tráfico, todavía podría ser posible, pero la barra se eleva significativamente. La firma y fijación de certificados hacen que esto sea increíblemente difícil.

De esta manera no se almacena ningún código fijo en la aplicación. El usuario debe pasar por una verificación de usuario / contraseña para incluso obtener dicho código. Incluso si publica el código fuente, un nombre de usuario y una contraseña válidos no estarán presentes.

Cada usuario y si se permiten múltiples inicios de sesión por usuario, cada instancia tiene una clave diferente. Si tienen un teléfono celular y una tableta.

Sin un nombre de usuario / contraseña, cualquier proceso puede ser diseñado por ingeniería inversa. El token de 64 bits no se puede adivinar fácilmente, pero el proceso de obtener uno podría adivinarse con el tiempo.

PHP tiene un "id de sesión", y usted podría vincular el id de sesión a la carpeta real internamente. Eliminar dicha carpeta después de 5 minutos o etc. Probablemente sea mejor utilizar una función aleatoria segura.

    
respondido por el cybernard 27.11.2018 - 17:48
fuente

Lea otras preguntas en las etiquetas