2012-07-20 20 views
16

Se si associa una chiamata api all'id dell'oggetto, è possibile semplicemente forzare questa api per ottenere tutti gli oggetti? Se pensi a MySQL, questo sarebbe totalmente possibile con gli ID interi incrementali. Ma per quanto riguarda MongoDB? Gli id ​​sono ipotizzabili? Ad esempio, se conosci un ID, è facile indovinare altri ID (successivi, precedenti)?Gli ID MongoDB sono ipotizzabili?

Grazie!

risposta

12

+1 per la risposta di Sergio, in termini di risposta se possono essere indovinati o meno, non sono hash, sono prevedibili, quindi possono essere "brute forzate" dato il tempo necessario. La verosimiglianza dipende da come sono stati generati gli ObjectID e da come si va a indovinare. Per spiegare, prima, di leggere le specifiche qui:

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

Cerchiamo quindi scomposizione pezzo per pezzo:

  • TimeStamp - del tutto prevedibile fino a quando si ha un'idea generale di quando il i dati sono stati generati
  • Macchina - questo è un hash MD5 di una delle varie opzioni, alcune delle quali sono più facilmente determinate di altre, ma altamente dipendenti dall'ambiente
  • PID - di nuovo, non un numero enorme di va lue qui, e potrebbe essere sleuthed per dati generati da una fonte nota
  • Incremento - se questo è un numero casuale piuttosto che un incremento (entrambi permessi), allora è meno prevedibile

Per espandere un po ' sulle fonti. ObjectIds può essere generato da:

  • MongoDB in sé (ma possono essere migrati, spostato, aggiornamento)
  • Il conducente (su qualsiasi macchina che inserisce o aggiorna i dati)
  • delle applicazioni (è possibile inserire manualmente il proprio ObjectID se lo si desidera)

Quindi, ci sono cose che potete fare per renderli più difficili da indovinare individualmente, ma senza un sacco di accortezza e garanzie, per un insieme di dati normale, gli intervalli di objectIds valide dovrebbero essere abbastanza facile da elaborare poiché sono tutti preceduti da un timestamp (a meno che tu non stia manipolando questo in qualche modo).

11

L'ObjectId di Mongo non è mai stato concepito come una protezione dall'attacco a forza bruta (o qualsiasi attacco, se è per questo). Offrono semplicemente unicità globale. Si dovrebbe non supporre che non sia possibile accedere ad alcuni oggetti da un utente perché questo utente non dovrebbe conoscere il suo id.

Per un'effettiva protezione delle risorse, impiegare altre tecniche.

Se si difende da un accesso non autorizzato, inserire una logica di autorizzazione nella propria app (consentire l'accesso a utenti legittimi, negare a tutti gli altri).

Se si desidera impedire il dumping di tutti gli oggetti, utilizzare un tipo di limitazione della velocità. Combinalo con l'autorizzazione se applicabile.

Lettura opzionale: Eric Lippert on GUIDs.

Problemi correlati