Supponiamo che gestisca un sito Web in cui è possibile creare immagini di gatti. Assegno a ogni immagine di gatto un identificatore univoco in modo che possa essere condivisa sui social media con http://catpictures.com/base62Identifier
.
Potrei dare alle immagini di gatto identificatori sequenziali come 1,2,3, ecc., ma poi sarebbe possibile scoprire facilmente quante nuove immagini di gatti gli utenti creano al giorno (tramite l'identificatore più grande che restituisce HTTP 200 ogni giorno). Questo mi espone alla strategia comune di ordinare un prodotto dai tuoi concorrenti una volta al mese e annotare il numero di fattura. I dati sul traffico del sito web sono ben correlati alle entrate aziendali, quindi ovviamente desidero mantenere segrete queste informazioni.
Quello che sto pensando di provare:
Sembra un lavoro per un algoritmo di hashing , giusto? Il problema è che osservando un hash è abbastanza facile dire quale algoritmo lo ha creato (md5, crc32, ecc.). Qualcuno con un tavolo arcobaleno farebbe un breve lavoro su quell'idea. Potrei salare l'identificatore [hash ("salt" +1), hash ("salt" +2), ...], ma poi dovrei preoccuparmi della sicurezza associata al salt. E il controllo delle collisioni.
Un'altra idea che ho avuto era quella di generare una stringa casuale di caratteri e usarla come chiave primaria dell'immagine del gatto nel database (o semplicemente potevo hash i primi n bit dei dati dell'immagine del gatto ). In questo modo dovrei solo verificare la presenza di collisioni.
Esiste un modo standard e best practice per evitare di esporre i volumi di traffico tramite i tuoi URL identificativi univoci?
Modifica: sono in particolare alla ricerca di una soluzione che sia una buona combinazione di sicurezza e idoneità come chiave primaria del database o colonna indicizzabile.