Domanda

Il criterio è sostanzialmente questo:

  • le cartelle saranno disponibili per circa 24-48 ore
  • i nomi delle cartelle non possono essere facilmente indovinabili da un utente (se utilizzato in un URL)
  • i nomi delle cartelle devono essere brevi 5-15 caratteri

Pensieri iniziali:

printf('%u',crc32(microtime(true)));

Dettagli: Quando si carica un file, sostanzialmente voglio mantenere il nome univoco del file come indicato dall'autore del caricamento, quindi per evitare qualsiasi collisione di nomi vorrei metterlo in una directory con un nome univoco ...

È stato utile?

Soluzione

[Modifica] Aspetta un secondo. PHP include direttamente nella libreria standard una funzione di generatore di ID univoca . Ci sono altri approcci troppo.

Altri suggerimenti

La tecnica classica assomiglia a

  + uploader-name  
    + 20090401
      + 010000     // hhmmss
      + 013000     // hhmmss
      + 014500     // hhmmss
    ...

    + 20090402

aggiunta di livelli, aggiunta "a", "b", "c", ecc. in base alla granularità desiderata.

Questo funziona esp. bene se l'utente si riferisce ai file in ordine cronologico.

Finisci per fare alcune enumerazioni di esistenza, ma non è così doloroso. L'ho usato molte volte (anche con PHP), principalmente perché la resistenza dell'utente è inferiore rispetto a qualsiasi altra alternativa che ho trovato.

Se sei così propenso, puoi abbellire le espressioni di data - " 2009-Apr-01 " ;, " 01: 45 AM" ;, ecc.

La lingua non è stata specificata, in Ruby farei:

require 'digest/md5'
Digest::MD5.hexdigest(Time.now.to_s)

=> "f531384b3cc8c60b7c5b7ad087cb0ae4"

Sembra una "sicurezza per oscurità" problema. Consiglierei contro tutto ciò che crea dati potenzialmente sensibili e li espone (anche per un breve periodo) in un modo che è sicuro solo perché ci si aspetta che nessuno indovinerà la posizione. Esistono attacchi di forza bruta che possono lacerare questo tipo di "sicurezza".

Utilizza la data e l'ora per generare il nome

Userei qualcosa del tipo:

$salt='Whatever you want';
$folderName=SHA1($salt.date('U'));

La data ('U') restituisce i secondi dall'epoca di Unix (1 gennaio 1970 00:00:00 GMT), quindi sarà probabilmente unica se non si generano più cartelle contemporaneamente?

In tal caso, basta cambiare leggermente il valore $ salt (renderlo un nome utente o un numero casuale ecc.)

Basare l'hash (md5 o sha) sul tempo rende indovinabile se l'utente sa approssimativamente quando viene generata la directory. Tutto quello che devono fare è impostare un semplice script per generare tutte le possibilità coperte in pochi secondi su entrambi i lati e quindi visitare il sito in cerca di una risposta. L'aggiunta di un sale, mentre aiuterà, non farà molto a lungo termine.

Per l'OP, quanto sopra vale per qualsiasi metodo. Se si esegue un server molto veloce, sarà necessario monitorare gli hit da directory casuali. Solo una directory di 5 lettere significa che qualcuno potrebbe visitare manualmente il sito abbastanza volte per scoprire la directory. 15 lo aumenta un po ', ma con alcune macchine che lo fanno in modo sceneggiato, non è fuori possibilità.

Lo standard C ++ ha funzioni tmpfile e tmpnum, sia su cstdio (stdio.h), sia di conseguenza crea un file temporaneo e il nome del file temporaneo. tmpfile viene eliminato alla fine del programma. Vorrei collegarli, ma purtroppo non posso ancora pubblicare collegamenti.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top