¿Es seguro almacenar las imágenes cargadas como datos de blob en la base de datos?

1

Estoy escribiendo una aplicación web Java y estoy tratando de evitar las vulnerabilidades de carga de archivos almacenando las imágenes de perfil cargadas como blob en la base de datos. ¿Es seguro almacenar un blob de imágenes cargadas en una base de datos para evitar:

  1. ¿Ejecutando los archivos con posibles vulnerabilidades de LFI?
  2. ¿Accediendo a los archivos de otros usuarios con recorrido de ruta?

¿Se puede ejecutar un archivo cuando se intenta mostrar la imagen al recuperar el archivo de la base de datos? ¿Puedo introducir nuevas vulnerabilidades mediante blobbing?

Planeo representar la imagen de la siguiente manera:

<img src="/path/to/servlet?userID=1"/>

Utilizo MySQL como sistema de gestión de bases de datos, y Glassfish como servidor web en Windows Server 2012 R2.

    
pregunta AXANO 22.10.2017 - 01:25
fuente

2 respuestas

2

Puedo prever un par de posibles vulnerabilidades que deberías tener en cuenta:

  • Desbordamiento de datos cargados: si no hay una manera de limitar el tamaño de las cargas, su servidor podría dañarse al enviarle un archivo muy grande.
  • Acceso fuera de límites, ya que está permitiendo que la imagen se sirva desde la base de datos que está permitiendo el acceso de lectura a la base de datos, si se usa un índice para acceder a la imagen, es posible acceder a otras ubicaciones en la base de datos, Del mismo modo, si la lectura permite una lectura incremental, podría recibir solicitudes de lectura que toman datos de fuera del blob.

Debes verificar el servidor & BD ha implementado pruebas para prevenir dichos ataques / mal comportamiento.

    
respondido por el Steve Barnes 22.10.2017 - 10:31
fuente
0
  

¿Se puede ejecutar un archivo al intentar servir la imagen al recuperar   el archivo de la base de datos?

La forma más segura es no abrir las imágenes cargadas en el sistema de archivos del servidor, una forma de hacerlo, como una mala práctica, es crear un archivo temporal para servir la imagen.

En lugar de eso, mantenga el procesamiento de imágenes entre el Servlet y el cliente al proporcionar los datos binarios de la imagen directamente desde la base de datos.

byte[] content = resultSet.getBytes("content");
response.getOutputStream().write(content);

Es decir, mientras mantengas el archivo de imagen fuera del sistema de archivos, no se activará ninguna amenaza potencial que se presente.

    
respondido por el elsadek 22.10.2017 - 13:39
fuente

Lea otras preguntas en las etiquetas