Invio di informazioni nell'URL
Un URL potrebbe essere accessibile anche a una persona che non dovrebbe avere accesso alla pagina effettiva a cui conduce. Dopo che tutti gli URL possono essere visualizzati in collegamenti su tutto il Web o perdite tramite le intestazioni di referer. Pertanto non dovrebbero esserci informazioni sensibili nell'URL.
L'ID Mongo contiene informazioni sul tempo di creazione dell'oggetto (dalla prima parte). Il contatore contiene solo informazioni su in quale ordine sono stati creati gli oggetti.
Il contatore fornisce anche informazioni su quanti oggetti ci sono in totale (vedi il problema dei carri armati tedeschi ). Ma lo è anche l'ID Mongo, poiché l'ultima parte è un contatore globale. Inizia da un numero casuale, quindi trasmette meno informazioni, ma un utente malintenzionato con molti URL può comunque stimare il numero totale di documenti.
Attacchi di enumerazione
Se gli URL sono sequenziali, è facile per un utente malintenzionato ottenere un elenco di tutte le risorse. Questo è chiamato un attacco di enumerazione.
Per il contatore questo è ovviamente facile da fare. Per l'ID Mongo è più difficile, dal momento che devi indovinare in quale millisecondo sono stati creati gli oggetti. Se hai una vaga idea su che ora vengono creati gli oggetti, puoi ancora forzarla.
Conclusione
Se sei preoccupato di rivelare informazioni sui tuoi documenti negli URL o di consentire agli utenti di enumerare tutti i documenti, entrambi gli approcci sono piuttosto negativi. Se non lo sei, entrambi gli approcci vanno bene.
Una terza soluzione
Se i problemi sopra ti preoccupano, puoi usare un ID casuale . Usa uno spazio ampio per ridurre la probabilità di collisioni e gestisci gli errori in modo che le cose non si interrompano se sei sfortunato.
L'ID potrebbe essere memorizzato come _id
(puoi sovrascrivere il valore predefinito) o in un campo chiamato url_id
o qualcosa del genere. Metti un indice hash univoco su di esso per velocizzare le ricerche.