Aber das wolltest Du uns ja eigentlich alles auseinanderklamüsern, oder? ;-P
Ok... weil Weihnachten ist - hier die weiche Variante, welche keine wirkliche Sicherheit bietet. Ist aber ideal um ein direktes Linken zu verhindern.
Voraussetzung:
Die eigentliche, statisch vorhandene Datei liegt in einem Verzeichnis, das außerhalb von Document-Root liegt oder mit htaccess geschützt ist (deny from all).
Der Benutzer ruft ein Formular auf und sendet Daten.
Die Daten werden geprüft. Im Falle des Fehlers geht es zurück zum Formular.
Ab hier also nur im positiven Fall, es folgt Pseudocode, der an PHP angelehnt ist.
$zeitstempel=date('YmdHi').
$verzeichnis_mit_Links_local = '/var/www/vhosts/vhost_1/downloads';
$verzeichnis_mit_Links_http = '/downloads';
$arDateien = scandir($verzeichnis_mit_Links_local);
foreach ($arDateien as $strDatei) {
if ('.' != $strDatei{1} {
$arTmp = explode('--', $strDatei);
if ($arTmp[0] < ($zeitstempel-1) ) {
unlink ($verzeichnis_mit_Links . '/' . $strDatei);
}
}
}
$linkfilename = $zeitstempel . '--' . md5(date('YmdHis') . $rand(0,get_randmax()) . 'das ist ein Salt') . '.rar';
$linkname_http = $verzeichnis_mit_Links_http . '/' . $linkfilename;
$linkname_local = $verzeichnis_mit_Links_local . '/' . $linkfilename;
$quelle = '/var/www/vhosts/vhost_1/privat/ganz_geheime_datei.rar';
link ($quelle, $linkname);
header('Location: ' . $_SERVER['HTTP_HOST'] . $linkname_http);
exit;
Die .htaccess des Downloadverzeichnisses:
Options -Indexes
[link:http:
Header set Content-Disposition "attachment; filename=download.rar"
Wenn es nicht geht dann liegt das ohne Zweifel daran, dass der Pseudocode ohne zu überlegen abgeschrieben wurde.
Hinweis: Es macht überhaupt nichts aus, wenn der Link gelöscht wird, so lange der Download noch läuft. Das begonnene Lesen in der Date bleibt möglich so lange die eigentlichen Daten nicht gelöscht oder überschrieben werden. Natürlich kann man die Links auch länger leben lassen. Das Anlegen eines links frisst weder extra Speicher noch nennenswert Zeit.
Diese Methode ist nicht zu empfehlen, wenn das Dateisystem NTFS oder noch schlechter ist und nicht möglich (wg. htaccess) wenn der Server kein Apache ist. Mit Apache auf Linux, Solaris, BSD oder sonstigen unixartigen OS sollte die Vorgehensweise passen.
Fred