Digamos que opero un sitio web donde puedes crear imágenes de gatos. Le doy a cada imagen de gato un identificador único para que pueda compartirse en las redes sociales con http://catpictures.com/base62Identifier
.
Podría dar a los cuadros de gato identificadores secuenciales como 1,2,3, etc., pero luego sería posible descubrir fácilmente cuántas fotos de gato nuevas crean los usuarios por día (por el identificador más grande que devuelve HTTP 200 cada uno). día). Esto me expone a la estrategia común de pedir un producto a sus competidores una vez al mes y anotar el número de factura. Las cifras de tráfico del sitio web están bien correlacionadas con los ingresos del negocio, por lo que obviamente quiero mantener esta información en secreto.
Lo que estoy considerando probar:
Esto suena como un trabajo para un algoritmo de hash, ¿verdad? El problema es que al observar un hash es bastante fácil saber qué algoritmo lo creó (md5, crc32, etc.). Alguien con una mesa de arco iris haría un breve trabajo de esa idea. Podría agregar el identificador [hash ("sal" +1), hash ("sal" +2), ...], pero luego tendría que preocuparme por la seguridad asociada con la sal. Y control de colisiones.
Otra idea que tuve fue generar una cadena aleatoria de caracteres y usarla como la clave principal de la imagen del gato en la base de datos (o simplemente podría marcar los primeros n bits de los datos de la imagen del gato). De esta manera solo tendría que verificar las colisiones.
¿Existe una forma estándar y de mejores prácticas para evitar exponer sus volúmenes de tráfico a través de las URL de identificadores únicos?
Editar: estoy buscando específicamente una solución que sea una buena combinación de seguridad y conveniencia como clave principal de la base de datos o columna indexable.