Agregar un nivel de seguridad extra + otra característica a una aplicación hecha en Django

Buen día a la comunidad.

Los consulto esta vez, dado que estoy programando una aplicación hecha en Django para un grupo de profesionales médicos, donde me piden si es posible agregar un nivel extra de seguridad, a una sección de la aplicación donde se muestran en forma de listado imágenes sensibles de sus pacientes. La intención es que nadie pueda pasar y descargarlas.

Por lo tanto, les pregunto… alguien hizo algo similar ? es posible poner un login adicional y que todo funcione normalmente ?

Por otra parte, también me solicitan si es posible agregar el dibujo del cuerpo humano para que ellos puedan agregarles referencias o que puedan dibujar sobre el. Acá si que estoy perdido completamente… busque librerías pero nada que apunte a esto.

Cualquier aporte es más que agradecido.

Saludos.

Hola.

No me queda muy en claro lo que queres hacer. El tema de ver quien puede ver el listado lo podriams manegar con el tema de permisos que tiene Django.

Otra opcion, es ponerle algo como 2 Factor Authentication a la aplicación, que ademas del password le va a pedir que lo valide de otra forma. Personalmente nunca lo hice pero se que hay paquetes de Python para eso.

Lo de dibujar claramente tendrias que hacer algo con javascript y te que mande toda la información a Django en una DB. Nunca lo hice pero podrias guiarte por algo tipo canvas y cosas asi.

No se si mi respuesta te sirve.

Hola Tomas,

Muchas gracias por tu respuesta.

Respecto de la primera parte de la pregunta; si bien lo podría manejar con los permisos de usuario, una posible opción era que un usuario tenga derechos sobre las distintas partes de la aplicación, pero que en un template en particular cuando quiera ver su contenido (lista de imágenes) tenga que autenticarse colocando un password distinto al del login u alguna otra opción que le frene acceder en forma directa a lo que esta en pantalla.

Voy a chequear lo de los canvas, algo vi en su momento…

Saludos.

Hola Diego.

Para no permitir acceso a los usuarios a las imágenes yo lo implementaría de la siguiente manera:

  • Separo en una clase de modelo distinta todo lo referido a las imágenes.
  • Otorgo permisos de acceso diferenciados para esa clase (por grupos?)
  • Referencio la segunda clase (la de imágenes) desde la primera.

Espero te sirva para empezar.

Saludos.

Hola Diego,

Ok, me queda claro. Entre lo que me comentó Tomás y lo tuyo, voy a ir por el camino de separar lo referente a las imágenes y aplicar los permisos correspondientes.

Muchas gracias.

Saludos.

son varios temas separados.

  1. seguridad de acceso

  2. seguridad en las comunicaciones

  3. acceso a las imagenes per se

1—
acceso: ademas del login lo estantar es agregar minimamente un factor de 2do nivel, tanto con una app que genere un codigo variable Y un backup de que el codigo llegue al mail del medico o por SMS (esto con costo, ojo)

2—
ya sea una pagina web como si es una app, tiene que estar todo bajo HTTPS minimo para que nadie en el medio vea nada.

3—
aca un gran error que he visto cientos de veces es que si sabes como se forma una URL de un recurso, varias datos y accedes a otras.
Ejemplo, las fotos de los DNI que publico el RENAPER en su momento y fueron scrapeadas por varios que venden datos/informes

aca lo que tenes que hacer es que antes de enviar la imagen (a la web o a la app) es validar que el usuario logueado tenga el “derecho” de ver esa imagen.


ahora siendo realistas es imposible lograr al 100% que alguien baje una imagen, ya sea que simplemente haga una captura de pantalla.

hace poco asesore a una institucion de diagnostico, querian digitalizar todo y que solo el medico que pidio los estudio pudiera verlos, querian que los pacientes no pudieran ver bajo ningun punto de vista sus estudios.

el area legal dijo que esto no se podia hacer dado que el paciente es dueño de los resultados, y que si el quiere darselo a otro medico para que los vea esta en todo su derecho.

creo que deberias de ver que es lo que realmente queres hacer y de ahi replantear la consulta para que te podamos ayudar

1 me gusta

Hola Gustavo, muchas gracias por tu respuesta.

Punto 1, en principio es el login solo. (tomo lo que decis sobre el 2do. factor)
Punto 2, es tal cual como vos indicas. Todo por https.
Punto 3. Esta buena la recomendación, por el tema de las posibles modificaciones de las url’s.
Básicamente el temor que tiene el cliente es que alguien pase por el equipo donde corre la app y que pueda descargar una imagen o tal vez hacer un print de pantalla / sacar una foto. Desde la fecha en que pregunté a hoy, hice las siguientes acciones:

  • Se modificó el lugar donde está el puesto de trabajo donde corre la app. Hoy en día circulan solamente 2 personas por dicho lugar.
  • Maneje con derechos que el usuario logueado pueda acceder a la sección de las imágenes
  • Con django-session-security deslogueo al usuario que posee derechos sobre las imágenes luego de un corto periodo de tiempo de inactividad.

Saludos.

1 me gusta

Diego, flotando en una nubes de gases metanoles (Ud me entiende)

asumi que solucionas el tema de login y que no puedan descargar las imagenes.

lo que siempre podes llegar a hacer es que esa PC no tenga acceso a internet y que tenga los puertos deshabilitados (cosa que no le enchufen un USB, ni manden un mail)

y configurar para deshabilitar todos los servicios de screenshot y si es un windows moderno la herramienta de recortes o como sea que se llame.

igualmente nada te salva de una foto con celular.

igual IMHO para evitar estas cosas existen los contratos de confidencialidad para hacerles firmar a los empleados.

se de enfermerxs que perdieron la matricula por sacar fotos a resultados de examenes de “fulbolistas” y pasarselo a la pareja y esta pasarselo a alguien mas y se hiciera viral los mismos.

y no estoy hablando de los equipos grandes, sino uno mas del monton…

Gustavo,

QSL a tu último correo (Ud me entiende… jeje).

Con lo que tengo, más estos consejos, creo que ya tengo cubierto todo el panorama.

Muchas gracias.

Un abrazo.

Diego.