2011-08-16 22 views
8

Estoy tratando de hacer una placa con mongoDB.¿Cómo utilizar Mongodb ObjectID como ID de documento?

Quiero asignar ID de documento con ObjectID.

Si un usuario puede acceder a una página de documento por http://www.example.com/4easdf123123 donde "4easdf123123" es un ObjectID mongoDB.

¿Existe alguna amenaza de seguridad posible, si uso y muestro ObjectID de mongo en la URL y lo uso como identificación de documento?

¿Y alguna sugerencia para asignar ID de documento con mongoDB?

+4

No se puede ver ningún problema con eso. Es lo mismo que usar una ID de RDBMS generada en una URL – Phil

+0

Puede usar: https://github.com/treygriffith/short-mongo-id – user956584

Respuesta

8

Eso no se parece a un ObjectID MongoDB - un ObjectID es de 12 bytes de datos binarios, y cuando se procesa como una cadena hexadecimal (la forma habitual de usarlo en una URL) sería de 24 caracteres de longitud. Supongo que está utilizando el official PHP Mongo Driver, en cuyo caso el constructor de la clase MongoId ignorará los valores no válidos y generará uno nuevo para usted. En cualquier caso, es mejor dejar que el controlador genere un ObjectID/MongoId, ya que lo hará de una manera que evite colisiones.

En cuanto a la seguridad de su uso en sus URL, debería estar bien. Por supuesto, debe utilizar las precauciones habituales sobre la implementación de código para garantizar que el usuario actual tenga acceso para ver el objeto que se muestra, etc., pero no existe mayor riesgo de seguridad al usar un ObjectID en la URL que cualquier otro identificador de base de datos (cadena , entero, etc.) y, a menudo, hay menos, ya que ObjectID no tiene ningún valor semántico (mientras que una cadena como "adminuser" en una URL puede transmitir que esa URL se relaciona con un usuario con privilegios elevados).

+0

bien lo usaré :) – InspiredJW

+0

Cuantos ObjectID de MongoDB únicos se pueden crear ? ¿Es probable que entren en conflicto en grandes cantidades de datos? – InspiredJW

+0

'ObjectId's están diseñados para ser únicos incluso cuando se generan sin coordinación en toda la aplicación. Incluyen una marca de tiempo, un resumen de la ID de la máquina, proceso o ID de hilo y un contador de incremento de 3 bytes. Tendrá que crear 2^24, o alrededor de 16 millones de 'ObjectId' del mismo proceso/hilo para que haya un conflicto (o se ejecute en una colisión hash en la ID de la máquina). Incluso si esto sucediera, solo sería un problema si los 'ObjectId's en cuestión se usaran en la misma colección que' _id' (o en otro campo único). – dcrosta

Cuestiones relacionadas