Frage

Die Kriterien ist im Grunde diese:

  • Ordner werden für etwa existieren 24-48hrs
  • Ordner-Namen können nicht von einem Benutzer leicht zu erraten sein (wenn in einer URL verwendet)
  • Ordnernamen sollten kurz 5-15 Zeichen
  • sein

Erste Gedanken:

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

Details: Wenn Sie eine Datei hochladen, mag ich im Grunde der eindeutigen Dateinamen behalten, wie durch den Uploader genannt, so jede Name Kollision vermeiden Ich möchte es in einem eindeutigen Namen Verzeichnis setzen ...

War es hilfreich?

Lösung

[Bearbeiten] Warten Sie eine Sekunde. PHP beinhaltet rechts in der Standardbibliothek ein rel="noreferrer">. Es gibt andere Ansätze zu.

Andere Tipps

Die klassische Technik sieht so etwas wie

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

    + 20090402

Ebene Hinzufügen "a", "b", "c", ... etc. Anfügen basierend auf gewünschte Körnigkeit.

Das funktioniert esp. auch wenn der Benutzer bezieht sich auf die Dateien überhaupt in chronologischer Reihenfolge.

Sie am Ende ein paar Existenz Aufzählungen zu tun, aber es ist nicht so schmerzhaft. Ich habe dies viele Male verwendet (einschließlich mit PHP), in erster Linie, weil Benutzer Widerstand geringer als für jede Alternative, die ich gefunden habe.

Wenn Sie so geneigt sind, um die Datumsausdrücke verschönern können -. "2009-Apr-01", "01.45", etc

Sprache nicht angegeben wurde, in Ruby ich tun würde:

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

=> "f531384b3cc8c60b7c5b7ad087cb0ae4"

Das klingt wie ein „Sicherheit durch Verschleierung“ -Problem. Ich würde gegen etwas empfehlen, die potentiell sensible Daten erzeugt und macht es (auch nur für kurze Zeit) in einer Weise, die nur sicher ist, weil es eine Erwartung ist, dass niemand die Lage erraten. Brute-Force-Angriffe existieren, und sie können diese Art von „Sicherheit“ auseinander reißen.

Verwenden Sie das Datum und die Zeit, um den Namen zu generieren

würde ich so etwas wie:

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

Datum ( ‚U‘) gibt die Sekunden seit der Unix-Epoche (1. Januar 1970 00:00:00 GMT), so ist es wahrscheinlich einzigartig sein werden, wenn Sie mehrere Ordner zur gleichen Zeit generieren?

In diesem Fall nur auf subtile Weise den $ Salz Wert ändern (macht es zu einem Benutzername oder Zufallszahl usw.).

Basieren den Hash (entweder MD5 oder SHA) auf der Zeit macht es zu erraten, wenn der Benutzer grob weiß, wann das Verzeichnis erzeugt wird. ein paar Sekunden auf beiden Seiten bedeckt und dann die Website der Suche nach einer Antwort Alles, was sie tun müssen, ist die Installation ein einfaches Skript, alle Möglichkeiten zu generieren. Zugabe eines Salzes, während es wird helfen, auf lange Sicht nicht viel nützt.

Zum OP steht die oben für jede Methode wahr. Wenn Sie ein ein sehr schnellen Server ausgeführt wird, müssen Sie die Treffer gegen zufällige Verzeichnisse überwachen. Nur 5 Brief Verzeichnisse haben bedeutet, dass jemand manuell die Website oft genug treffen konnte das Verzeichnis zu entdecken. 15 nicht erhöht es etwas, aber mit ein paar Maschinen in einem scripted Art und Weise zu tun, ist es nicht aus der Möglichkeit.

C ++ Standard hat Funktionen tmpfile und tmpnum, sowohl bei cstdio (stdio.h) und erstellt eine temporäre Datei und temporäre Dateinamen entsprechend. tmpfile wird, obwohl am Ende des Programms gelöscht. Ich würde sie verbinden, aber leider kann ich keine Links nur noch.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top