¿Debo estar pensando en la seguridad en la fila de la base de datos / nivel de documento?

2

Supongamos que tengo una aplicación web que es una red social. Para que dos personas tengan acceso al contenido de cada uno, deben hacerse amigos.

Hay una lógica en la aplicación para garantizar que ambos se hayan mejorado y, una vez que esto sucede, se realiza una actualización en la matriz de "amigos" de cada usuario.

Sin embargo, me estoy preguntando; Supongamos que algún pirata informático haya encontrado una manera de agregar su ID de usuario a la matriz friends de otro usuario. Ahora él puede ver el contenido del otro usuario sin autorización. Para simplificar, suponga que este es el único defecto de seguridad en el sistema.

¿Cómo se protege uno contra este tipo de posibilidad? ¿Hay características en las bases de datos que manejan esto?

P.S. La base de datos que estoy usando es MongoDB, pero también tiene curiosidad por saber acerca de otros

    
pregunta CodyBugstein 14.02.2018 - 17:30
fuente

2 respuestas

2

En general, lo que está describiendo es responsabilidad de la capa de aplicación y no de la capa de base de datos. Su aplicación debe asegurarse de que solo se agreguen amigos aceptados mutuamente a la lista y de que se requiera la autorización adecuada para acceder a los datos.

Esta responsabilidad no se puede transferir realmente a la base de datos de manera sencilla, como lo explica Pascal . Al final, siempre necesitarás algún mecanismo mediante el cual la aplicación le diga a la base de datos que dos personas son amigas. Si se puede engañar a la aplicación para que "mienta" a la base de datos, tiene problemas sin importar qué.

Lo que podría hacer es bloquear la aplicación para que no actualice las tablas y, en su lugar, confiar en los procedimientos que imponen sus restricciones de seguridad. Pero ahora acaba de mover el problema a un nuevo lugar. Y probablemente en un lenguaje de programación y un entorno de desarrollo que es peor para trabajar. Tratar de poner la lógica de la aplicación en la base de datos no es un éxito.

Así que la capa de aplicación es la relevante aquí. Enfoca tu energía en asegurar eso.

    
respondido por el Anders 16.02.2018 - 11:08
fuente
1
  

¿Hay características en las bases de datos que manejan esto?

Veamos MySQL:

La base de datos se ejecuta como su propio proceso (al igual que MongoDB). Se conecta al proceso db con credenciales de usuario específicas. La autorización se determina en función del usuario conectado.

En una aplicación web, la aplicación web generalmente tiene sus propias credenciales de usuario para conectarse a la base de datos, pero toda la aplicación web utiliza la misma conexión de base de datos y, por lo tanto, está sujeta a los mismos derechos de acceso.

Por lo tanto, no puede resolver su problema restringiendo los derechos de acceso a algunas filas o columnas de la base de datos o incluso a tablas. Los usuarios de su aplicación no corresponden a los usuarios de la base de datos, por lo que debe implementar la autorización para los usuarios de la aplicación en la aplicación. No puedes aplazarlo a la base de datos.

    
respondido por el Pascal 15.02.2018 - 21:48
fuente

Lea otras preguntas en las etiquetas