¿Cuáles (si los hay) son los riesgos de seguridad asociados con exponer una cadena MongoID en una URL?

Siempre que la aplicación esté debidamente protegida y nadie tenga acceso directo a la base de datos, debe estar seguro. Al contrario de lo que algunas personas puedan imaginar, el _id no es un hash del contenido del objeto, y su valor depende solo de la marca de tiempo y la máquina donde se ejecuta el servidor. Para los efectos más prácticos, es lo mismo que usar una identificación secuencial o cualquier otro tipo de clave primaria: una cadena única o UUID, por ejemplo.

En mi opinión, preocuparse (demasiado) por el _id de MongoDB es una especie de práctica de “seguridad a través de la oscuridad”, que se sabe que es una visión miope en cuestiones de seguridad. Si su sistema es vulnerable al conocer esta información, entonces tiene mayores problemas de los que preocuparse.

Harry Heymann comentó sobre su respuesta que, en algunos casos, conocer la marca de tiempo puede ser un problema para algunas aplicaciones en particular; después de leer su respuesta, supongo que tiene razón, pero aun así es una vulnerabilidad muy limitada que le permite inferir una información eso no estaba directamente disponible antes; Probablemente no sea algo que pueda explotar para obtener acceso a un sistema o algo así. Si ese es su caso, y tiene buenas razones para preocuparse, puede anular el campo MongoDB _id. La documentación en http://www.mongodb.org/display/D… explica lo que necesita saber.

Una cuestión a tener en cuenta es que, de forma predeterminada, los primeros 4 bytes de un ObjectId son una marca de tiempo (número de segundos desde la época). Entonces, al exponer la identificación, está exponiendo el momento en que se creó el objeto dado. En la mayoría de los casos, esto no debería ser un problema, pero en algunas aplicaciones podría serlo, por lo que es bueno saberlo.