Diciamo che gestisco un sito web dove puoi creare immagini di gatti. Fornisco ad ogni immagine di gatto un identificatore univoco in modo che possa essere condivisa sui social media con http://catpictures.com/base62Identifier
.
Potrei dare al gatto immagini identificatori sequenziali come 1,2,3, ecc., ma poi sarebbe possibile scoprire facilmente quante nuove immagini di gatti create dagli utenti al giorno (dall'identificatore più grande che restituisce ogni 200 HTTP giorno). Questo mi espone alla strategia comune di ordinare un prodotto dalla concorrenza una volta al mese e prendendo nota del numero della fattura. I dati sul traffico del sito web sono ben correlati alle entrate aziendali, quindi ovviamente voglio mantenere segrete queste informazioni.
Quello che sto considerando di provare:
Sembra un lavoro per un algoritmo di hash, giusto? Il problema è che osservando un hash è abbastanza facile dire quale algoritmo lo ha creato (md5, crc32, ecc.). Qualcuno con un tavolo arcobaleno avrebbe fatto un lavoro breve a quell'idea. Potrei salare l'identificatore [hash ("sale" +1), hash ("sale" +2), ...], ma poi dovrei preoccuparmi della sicurezza associata al sale. E controllo delle collisioni.
Un'altra idea che ho avuto è stata quella di generare una stringa casuale di caratteri e usarla come chiave primaria dell'immagine del gatto nel database (o solo avrei potuto cancellare i primi n bit dei dati delle immagini cat). In questo modo dovrei solo controllare le collisioni.
Esiste un modo standard e pratico per evitare di esporre i tuoi volumi di traffico attraverso i tuoi URL identificatori univoci?
Modifica: sono specificamente alla ricerca di una soluzione che sia una buona combinazione di sicurezza e idoneità come chiave primaria del database o colonna indicizzabile.