Apache - Download verbieten

mike

Well-Known Member
Hallo!

Gibts in Apache eine Möglichkeit ein direktes Download zu verbieten?

www.mydomain.com/folder/test.zip

Der direkte Download von test.zip soll nicht möglichsein. Allerdings sollte das nur auf dem Subdomain www sein und im Ordner folder.

Danke im Voraus,
lg
 
Die Datei jemand anderen zuweisen. Und auf 700 setzen.
Bloß: Muß die Datei überhaupt da sein? Wenn du nicht willst das sie runtergeladen wird pack sie doch in deine privaten Account.
 
Naja es ist folgendes: Die Rechte (Welcher User darf welche Datei downloaden) wird über PHP gesteuert. Nun sollte der User logischerweise nicht die Möglichkeit haben die Datei direkt downzuloaden.
Darum dachte ich, man kan per <VirtualHost..> oder <Directory ...> in der httpd.conf sagen, dass kein direkt Download erlaubt ist.
 
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalso...
ich wuerde das so machen:
die datei in irgendein verzeichnis legen, und die unix-rechte so setzen, dass nur php die auslesen kann.
wenn jemand dann auf download klickt, dann ist der link nicht
Code:
www.mydomain.com/folder/test.zip
sondern
Code:
www.mydomain.com/download.php?folder/test.zip

das download.php baust du dir so, dass der die test.zip includiert, und oben und unten nur die richtigen header ranpflanscht.
leider hab ich keine ahnung von php, also kann ich dir auch nichts genaueres dazu sagen, geschweige denn, obs ueberhaupt funzen wuerde.

vielleicht kannst du auch apache verbieten, dass der so ohne weiteres in den folder reinkommt.... hmmmmmm...
 
ich würde eine .htaccess in "folder" legen, die alles verbietet
und ein admin php bauen, das nach dem upload von dateien
gestartet wird, alle dateien aus folder einliest und eine
tabelle "downloads" anlegt / aktualisiert (bzw. müsstest du die
für eine user gesteuerte berechtigung ja schon haben)
für die user dann wiederrum ein php script das die
tabelleneinträge anzeigt und einen download link der art
www.mydomain.com/download.php?test.zip anbietet,
das php script sucht dann für den tabelleneintrag
test.zip den pfad heraus und wirft die datei zum browser
 
Danke für Eure Antworten!!!!

@troll: ja - string escapaen ist klar. Daten werden in DB gespeichert - daher ists mit der ID kein Problem.

Trotzdem habe ich noch das Problem, dass der User nen "Lucky Strike" machen kann und den Namen errät: www.mysite.com/downloads/bla.zip

Geht das mit UNIX perms überhaupt? Ist die UID von PHP nicht gleich der von Apache? Bzw. in Apache muss es ja möglich sein zu sagen, dass File Downloads nicht erlaubt sind. Ich komm nur nicht dahinter wie :S
Manche Seiten haben ja auch z.b. eine Sperre drinen, wenn man Bilder direkt aufruft. Wie machen die das bzw. wie verarbeiten die die Refer URL?

thx&lg
 
@dagnu: Könntest du das mit der .htaccess file evntl genauer erläutern? Ist das mit dem Rewrite zu lösen?
 
mike schrieb:
Manche Seiten haben ja auch z.b. eine Sperre drinen, wenn man Bilder direkt aufruft. Wie machen die das bzw. wie verarbeiten die die Refer URL?
ja, siehe .htaccess oder direkte httpd.conf Konfiguration (Möglichkeiten sind fast
identisch, .htaccess ist ein wenig abgespeckt)
 
mike schrieb:
Trotzdem habe ich noch das Problem, dass der User nen "Lucky Strike" machen kann und den Namen errät: www.mysite.com/downloads/bla.zip


Mach folgendes:

Pack die Downloads in ein Verzeichnis, dass nicht übers Web erreichbar ist. User kann also nicht mehr direkt downloaden.
Dein PHP-Script prüft jetzt, ob jemand berechtigt ist die Datei runterzuladen und wie die Datei heisst. Jetzt wird nicht auf die Datei verlinkt, sondern dein PHP-Script gibt die Datei aus, da es ja in der Lage ist, die Datei im Filesystem zu lesen:

Code:
<?PHP
// Alle moeglichen Test
header("Content-Type: aplication/irgendeinstuss");
header("Content-Disposition: attachment; filename=$filename" );
header("Expires: 0");
header("Cache-Control: must-revalidate, post-check=0,pre-check=0");
header("Pragma: public");
readfile("$download_path/$filename");
?>

Du musst darauf achten, dass vor diesem Part nicht eine einzige Zeile Text, oder auch nur ein Leerzeichen ausgegeben wird, sonst kann der Header nicht mehr gesendet werden.
 
Zurück
Oben