Regalar información en la URL
Una URL puede ser accesible incluso para una persona que se supone que no debe tener acceso a la página real a la que conduce. Después de que todas las URL puedan aparecer en enlaces en toda la web o filtrarse a través de los encabezados de los remitentes. Por lo tanto, no debe haber información confidencial en la URL.
El ID de Mongo contiene información sobre la hora en que se creó el objeto (desde la primera parte). El contador solo contiene información sobre en qué orden se crearon los objetos.
El contador también proporciona información sobre cuántos objetos hay en total (consulte el problema del tanque alemán ). Pero también lo hace la identificación de Mongo, ya que la última parte es un contador global. Comienza desde un número aleatorio, por lo que transmite menos información, pero un atacante con muchas URL aún puede estimar el número total de documentos.
Ataques de enumeración
Si las URL son secuenciales, es fácil para un atacante obtener una lista de todos los recursos. Esto se llama un ataque de enumeración.
Para el contador esto es obviamente fácil de hacer. Para el ID de Mongo es más difícil, ya que hay que adivinar qué objetos de milisegundos se crearon. Si tiene una vaga idea sobre la hora en que se crean los objetos, aún podría hacerlo con fuerza bruta.
Conclusión
Si le preocupa entregar información sobre sus documentos en las URL o permitir que los usuarios enumeren todos los documentos, ambos enfoques son bastante malos. Si no lo eres, ambos enfoques están bien.
Una tercera solución
Si los problemas anteriores le preocupan, puede usar un ID aleatorio en su lugar. Use un espacio grande para disminuir la probabilidad de colisiones, y maneje algunos errores para que las cosas no se rompan si tiene mala suerte.
La ID podría almacenarse como _id
(puede anular el valor predeterminado) o en un campo llamado url_id
o algo así. Ponga un índice de hash único en él para hacer búsquedas rápidas.