2012-07-20 15 views
16

Si enlaza una llamada api a la identificación del objeto, ¿podría uno simplemente forzar en bruto esta API para obtener todos los objetos? Si piensas en MySQL, esto sería totalmente posible con identificadores de enteros incrementales. Pero, ¿qué hay de MongoDB? ¿Los identificadores son adivinables? Por ejemplo, si conoce una identificación, ¿es fácil adivinar otras ID (siguiente, anterior)?¿Se pueden adivinar los id de MongoDB?

Gracias!

Respuesta

12

+1 para la respuesta de Sergio, en términos de responder si podrían adivinarse o no, no son hashes, son predecibles, por lo que pueden ser "forzados por fuerza bruta" con tiempo suficiente. La probabilidad depende de cómo se generaron los ObjectID y cómo se trata de adivinar. Para explicar, en primer lugar, leer la especificación aquí:

http://www.mongodb.org/display/DOCS/Object+IDs#ObjectIDs-BSONObjectIDSpecification

Pasemos a continuación descomponerlo pieza por pieza:

  • marca de hora - completamente predecible, siempre y cuando usted tiene una idea general de que el los datos se generaron
  • Máquina - esto es un hash MD5 de una de varias opciones, algunas de las cuales se determinan más fácilmente que otras, pero altamente dependiente del entorno
  • PID - de nuevo, no una gran cantidad de va lues aquí, y podría ser sleuthed para los datos generados a partir de una fuente conocida
  • Incremento - si esto es un número aleatorio en lugar de un incremento (ambos están permitidos), entonces es menos predecible

Para ampliar un poco en las fuentes. ObjectID se pueden generar por:

  • MongoDB en sí (pero se pueden migrar, movido, actualizado)
  • El conductor (en cualquier máquina que inserta o actualiza los datos)
  • su solicitud (se puede insertar manualmente su propia de objeto si lo desea)

por lo tanto, hay cosas que puede hacer para hacerlos más difícil de adivinar de forma individual, pero sin mucha premeditación y salvaguardias, para un conjunto de datos normal, los rangos de ObjectID válidos deben estar bastante fácil de resolver, ya que todos tienen un prefijo con una marca de tiempo (a menos que estés manipulando esto de alguna manera).

11

Objeto objetivo de Mongo nunca fueron una protección contra el ataque de fuerza bruta (o cualquier ataque, para el caso). Simplemente ofrecen singularidad global. Debe no suponer que un objeto no puede ser accedido por un usuario porque este usuario no debe conocer su id.

Para una protección real de sus recursos, emplee otras técnicas.

Si defiende el acceso no autorizado, coloque un poco de lógica de autorización en su aplicación (permita el acceso a usuarios legítimos, denegar para todos los demás).

Si desea impedir el dumping de todos los objetos, utilice algún tipo de limitación de velocidad. Combine con autorización si corresponde.

Lectura opcional: Eric Lippert on GUIDs.

Cuestiones relacionadas