2011-01-03 17 views
37

Mi piacciono molto gli ID generati automaticamente da MongoDB. Sono veramente utili.MongoDB: è sicuro usare l'ID del documento "in pubblico"?

Tuttavia, è possibile utilizzarli pubblicamente?

Diciamo che c'è una raccolta di post e la pagina/posts che accetta id paramater (qualcosa come/posts/4d901acd8df94c1fe600009b) e mostra informazioni su di esso.

In questo modo l'utente/hacker conoscerà l'ID oggetto reale del documento. Va bene o non è sicuro?

Grazie

risposta

25

Sez here, gli ID generati automaticamente includono un ID macchina a 3 byte (presumibilmente un hash dell'indirizzo MAC). Non è inconcepibile che qualcuno possa capire le cose sulla tua rete interna confrontando quei tre byte in vari id, ma a meno che tu non stia lavorando per il Pentagono che non sembra degno di essere preoccupato (hai molte più probabilità di essere vulnerabile a qualcosa di più noioso come un Apache male configurato).

Oltre a questo, la destra di Epcylon; non c'è nulla di intrinsecamente insicuro nell'esporre gli id ​​attraverso gli URL. Che si tratti di il brutto è un'altra questione, ovviamente. Puoi basarli64 per renderli più brevi (ho pensato a me stesso), ma c'è il fatto strano che sono tutti circa la metà ...

5

Non ho esperienza con MongoDB in un ambiente di produzione, in modo da non prendere la mia risposta come la verità, ma non riesco a immaginare il motivo per cui non dovrebbe essere al sicuro.

Confronto con una colonna di tipo Auto-ID in un RDBMS. Tu esponi quelli all'esterno sempre, non so per quale motivo non stia facendo lo stesso con gli id ​​di MongoDB.

Come sempre, la sicurezza dovrebbe essere nel convalidare il tuo input e non lasciare che nessuno si avvicini al tuo database senza una protezione adeguata. Fallo correttamente e non dovrebbe importare se sanno come selezionare un particolare oggetto nel tuo database, dato che non possono ancora fare nulla con esso.

1

Non è più pericoloso che usare il valore dell'ID di incremento automatico da MySql. Non è una violazione della sicurezza in alcun modo.

3

Forse pensate a questo più come un privacy di problema di sicurezza.

Sto affrontando esattamente lo stesso problema. Nella memorizzazione del contenuto dei contributi degli utenti nelle directory accessibili tramite Web in base all'ID generato da Mongo, esiste il rischio che tali ID siano prevedibili che un utente possa accedere ai contenuti di un altro utente.

Penso che il consiglio degli altri sia la strada giusta: conoscere l'URL del contenuto privato specifico per l'utente non dovrebbe essere sufficiente per accedervi. Un tentativo di accesso dovrebbe verificare che l'utente corrispondente stia effettuando la richiesta.

intendo farlo in Symfony2 memorizzando il contenuto dell'utente fuori della radice web, consentendo quindi l'accesso ad esso tramite un nuovo percorso/regolatore che prima di passare la risposta validerà alcune informazioni di identificazione circa l'utente.

5

Ho pensato che _id di mongodb era basato su un datestamp, e l'indirizzo sever e altre cose che potreste preferire mantenere private.

Se si è preoccupati potrebbe valere la pena di crittografare i mongoidi e utilizzare il risultato come identificativo lato client (e quindi annullare la crittografia quando le richieste rientrano).

Se la chiave di crittografia è parzialmente basata su alcuni attributi univoci dell'utente o della sessione in questione, ciò rende difficile agli utenti l'accesso ai contenuti quando non dovrebbero.

Ovviamente ancora importante per convalidare l'utente con altri mezzi!

0
  1. Se id fornisce il collegamento a contenuto "non in elenco" che richiede solo il collegamento, è un problema di privacy.

  2. Se id fornisce un collegamento al contenuto che è in accesso utente - non è un problema.

Non importa se è MongoDb, SQL o qualsiasi altro id. L'ID è la chiave per i dati. Se questa chiave è l'unica cosa è necessario visualizzare il contenuto che non si dovrebbe - questo è un problema. Per tale situazione - genera un ID non percettibile.

Problemi correlati