security - users - MongoDB: ¿es seguro usar la identificación del documento "en público"?
mongodb users (6)
Realmente me gustan los ID generados automáticamente por MongoDB. Ellos son realmente útiles.
Sin embargo, ¿es seguro usarlos públicamente?
Digamos que hay una colección de publicaciones, y la página / posts que toma el parámetro id (algo así como / posts / 4d901acd8df94c1fe600009b) y muestra información al respecto.
De esta forma, el usuario / pirata informático conocerá la identificación de objeto real del documento. ¿Está bien o no es seguro?
Gracias
Si id proporciona un enlace al contenido "no incluido en la lista" que solo requiere un enlace, se trata de un problema de privacidad.
Si id proporciona un enlace al contenido que está bajo el inicio de sesión del usuario, no hay problema.
No importa si es MongoDb, SQL o cualquier otra identificación. Id es la clave de los datos. Si esta clave es lo único que necesita para ver el contenido que no debería, eso es un problema. Para tal situación, genera id.
Creí que mongodb _id se basaba en una marca de fecha, en una dirección de corte y en otras cosas que preferiría mantener en privado.
Si le preocupa, podría valer la pena cifrar mongoids y usar el resultado como un identificador del lado del cliente (y luego des-cifrar cuando vuelvan las solicitudes).
Si la clave de cifrado se basa parcialmente en algún atributo único del usuario o sesión en cuestión, eso dificulta que los usuarios accedan al contenido cuando no deberían hacerlo.
¡Obviamente sigue siendo importante validar al usuario por otros medios!
La documentación de ObjectID establece que los ID generados automáticamente incluyen una ID de máquina de 3 bytes (presumiblemente un hash de la dirección MAC). No es inconcebible que alguien pueda descifrar cosas sobre su red interna comparando esos tres bytes en varios identificadores, pero a menos que esté trabajando para el Pentágono no parece que valga la pena preocuparse (es mucho más probable que sea vulnerable a algo más aburrido como un Apache mal configurado).
Aparte de eso, Epcylon tiene razón; no hay nada intrínsecamente inseguro sobre la exposición de los identificadores a través de las URL. Si es feo es otro asunto, por supuesto. Puedes basarlos64 para acortarlos (he estado pensando en esto yo mismo), pero luego está el hecho extraño de que son casi la mitad de lo mismo.
No es más inseguro que utilizar el valor de la identificación de incremento automático de MySql. No es una violación de seguridad de ninguna manera.
No tengo experiencia con MongoDB en un entorno de producción, así que no consideres mi respuesta como la verdad, pero no puedo imaginar por qué no debería ser segura.
Compare con una columna de tipo Auto-ID en un RDBMS. Expones a los que están fuera todo el tiempo, no sé de ninguna razón para no hacer lo mismo con los ID de MongoDB.
Como siempre, la seguridad debe ser validando su entrada y no permitiendo que nadie se acerque a su base de datos sin la protección adecuada. Hágalo correctamente y no debería importar si saben cómo elegir un objeto en particular en su base de datos, ya que todavía no pueden hacer nada con él.
Quizás piense en esto más como un problema de privacidad que de seguridad .
Estoy enfrentando exactamente el mismo problema. Al almacenar el contenido contribuido por el usuario en directorios a los que se puede acceder desde la web según el ID generado por Mongo, existe el riesgo de que esos ID sean predecibles de que un usuario pueda acceder al contenido de otro usuario.
Creo que el consejo de los demás es la ruta correcta: conocer la URL del contenido privado específico del usuario no debería ser suficiente para acceder a ella . Un intento de acceso debe verificar que el usuario coincidente realiza la solicitud.
Tengo la intención de hacer esto en Symfony2 almacenando el contenido del usuario fuera de la raíz web, y luego permitir el acceso a él a través de una nueva ruta / controlador que antes de pasar la respuesta validará cierta información de identificación sobre el usuario.