Speichern ohne Zugang durch URL
Basti
- php
Hallo!
Ich weiß jetzt nicht genau, in welchen Bereich meine Frage gehört, aber ich hoffe mal, ich bin hier richtig *gg*
Also meine Frage ist folgende: Wie kann ich Dateien per Upload-Skript auf einen Apache-Server so hochladen, dass sie von außen per URL-Eingabe nicht zu erreichen sind. Ich hab mal gehärt, dass das irgendwie möglich sein soll ("...oberhalb des Root-Verzeichnisses" oder so ähnlich).
Mein Ziel ist es, einen Download anzubieten, bei dem der Anwender nicht sieht woher diese Datei kommt ( aus Sicherheitsgründen!).
Wär cool, wenn ihr ne Idee habt.
Ich danke schon mal recht herzlich :-)
Vielen Dank,
Basti
Hallo!
Hallo Basti
Mein Ziel ist es, einen Download anzubieten, bei dem der Anwender nicht sieht woher diese Datei kommt ( aus Sicherheitsgründen!).
ich würde mir keine datei downloaden ohne zu wissen woher diese datei kommt (aus sicherheitsgründen) ;-)
gruss
m.tietz
Hallo m.tietz!
ich würde mir keine datei downloaden ohne zu wissen woher diese datei kommt (aus sicherheitsgründen) ;-)
So war das nicht gemeint :-)
Der Anwender will bzw. soll ja eine Datei runterladen, er soll nur nicht wissen, wo genau diese Datei liegt. Das es sich um einen seriösen Dienst *hust* handelt, stellt sich diese Frage also nicht.
ok, ich weis was du meinst:
du bietest einen download an, wenn der user auf den downloadlink klick soll der browser NICHT "schreiben":
sie möchten folgende datei runterladen: xxx
von http://xxx.xxx.xx
von typ: xxx
ist IMHO nicht möglich, würde ich persönlich auch als "schweren sicherheitsbug" im browser sehen.
m.tietz
Moin
du bietest einen download an, wenn der user auf den downloadlink klick soll der browser NICHT "schreiben":
sie möchten folgende datei runterladen: xxx
von http://xxx.xxx.xx
von typ: xxx
Man Deine Glaskugel möchte ich mal haben...
TomIRL
Man Deine Glaskugel möchte ich mal haben...
Meinst du mich? Wieso meinst du, dass das nicht möglich ist??
So wie Jan das gesagt hat, muss das doch gehen, oder?
Nein ich meinte nicht Dich...
Der Kollege tiez hat was geschrieben, was man mit einer blühenden Phantasie vielleicht verstehen könnte gewiss aber nicht aus dem ableiten kann was Du als dein Problem beschrieben hast.
naja Und die Glaskugel vom Kollegen Tiez muß er bei Pfennigpfeifer gekauft haben...
TomIRL
Nein ich meinte nicht Dich...
Der Kollege tiez hat was geschrieben, was man mit einer blühenden Phantasie vielleicht verstehen könnte gewiss aber nicht aus dem ableiten kann was Du als dein Problem beschrieben hast.
naja Und die Glaskugel vom Kollegen Tiez muß er bei Pfennigpfeifer gekauft haben...TomIRL
Na, dann ist ja gut *gg*
Aber es muss doch eigetnlich möglich sein, dass ich die Datei dann nach oberhalb des Document Root verschiebe, so dass es dann nicht per URL erreichbar ist (move_uploaded_file). Danach könnte man das doch aber sicherlich wieder downloaden über ein php-skript, oder? auch wenn es ansonsten nicht frei zugänglich ist
Hallo,
Aber es muss doch eigetnlich möglich sein, dass ich die Datei dann nach oberhalb des Document Root verschiebe, so dass es dann nicht per URL erreichbar ist (move_uploaded_file). Danach könnte man das doch aber sicherlich wieder downloaden über ein php-skript, oder? auch wenn es ansonsten nicht frei zugänglich ist
also ich hab das auch schon gesehen dass man eine datei nur downloaden kann b.s.p. wenn man sich eingeloggt oder registriert hat und dann aber nur einmal die datei
downloaden kann,nicht mit einem direkt link anschliessend.Der download wurde dann auf der nächsten seite automatisch ausgelöst.
Ich glaube das funtzte damals mit session oder cookie,aber wie ich gesehen habe suchst du noch was besseres also ohne link ?!
Ich habe auch ein script das z.B. login daten ausliest unterhalb vom root verzeichniss,wo andere normalerweise kein zugriff haben.
Ich denke das sollte mit einem download script auch möglich sein,frag mich aber jetzt nicht wie.
Gruss vom Alain
OK, das klappt alles wunderbar! Die Datei ist per URL nicht zu erreichen.
Für interessierte, hier der Beispiel-Code:
<form enctype="multipart/form-data" action="<?php $PHP_SELF ?>" method="post">
<input type="hidden" name="MAX_FILE_SIZE" value="30000" />
Send this file: <input name="userfile" type="file" />
<input type="submit" value="Send File" />
</form>
<?
$uploaddir = 'c:/apache/';
$uploadfile = $uploaddir . $_FILES['userfile']['name'];
print "<pre>";
if (move_uploaded_file($_FILES['userfile']['tmp_name'], $uploadfile)) {
print "File is valid, and was successfully uploaded. ";
print "Here's some more debugging info:\n";
print_r($_FILES);
} else {
print "Possible file upload attack! Here's some debugging info:\n";
print_r($_FILES);
}
print "</pre>";
Meine nächste Frage *gg* schließt sich im Prinzip direkt daran an:
Wie schaffe ich das denn jetzt, dass ich einen Download einbaue, die diese Datei runterlädt?
Habt ihr nen Rat?
Danke, schonmal :-))
hi,
Meine nächste Frage *gg* schließt sich im Prinzip direkt daran an:
Wie schaffe ich das denn jetzt, dass ich einen Download einbaue, die diese Datei runterlädt?
rfue ein php-script auf, dem du eine ID oder sonstiges übergibst, um deine datei oberhalb des doc root identifizieren zu können.
lasse dieses script zunächst mit header() den geeigneten conten-type ausgeben, und anschliessend die daten aus der datei, mit readfile().
gruss,
wahsaga
Hallo wahsaga!
Da ich ein absoluter Newbie auf diesem Gebiet bin, sagt mir das ganze leider nicht allzu viel :-(
Kannst du mir vielleicht ein Beispielskript zeigen, an dem ich ein wenig rumtesten kann, wie das läuft?
Das wäre echt prima....
Hallo!
Ich glaube, dass ich eine Lösung gefunden habe *stolz bin*
Das Skript ist unter [1] zu finden.
Und so sieht es aus:
// $download sei der Bezeichner für die zu ladende Datei
// etwa:
$download = $_GET['download'];
// Dieses Verzeichnis liegt außerhalb des Document Root und
// ist nicht per URL erreichbar.
//Mein Root-Verzeichnis heißt c:/apache/htdocs/ und die Datei ist bei mir oberhalb des Root-Verzeichnisses gespeichert. Also so:
$basedir = "c:/apache";
// Übersetzung von Download-Bezeichner in Dateinamen.
$filelist = array(
$_GET['download'] => $download );
// Einbruchsversuch abfangen.
if (!isset($filelist[$download]))
die("Datei $download nicht vorhanden.");
// Vertrauenswürdigen Dateinamen basteln.
$filename = sprintf("%s/%s", $basedir, $filelist[$download]);
// Passenden Datentyp erzeugen.
//header("Content-Type: application/octet-stream");
header("Content-type: application/force_download");
// Passenden Dateinamen im Download-Requester vorgeben,
// z. B. den Original-Dateinamen
$save_as_name = basename($filelist[$download]);
header("Content-Disposition: attachment; filename="$save_as_name"");
// Datei ausgeben.
readfile($filename);
Meine letzte Frage lautet jetzt nur: Kann der Anwender irgendwo her sehen, wo diese Datei herkommt?
Danke für die ganze Hilfe!!!!!
[1] http://www.dclp-faq.de/q/q-datei-download.html
hi,
Meine letzte Frage lautet jetzt nur: Kann der Anwender irgendwo her sehen, wo diese Datei herkommt?
nein, natürlich nicht.
er ruft das php-script auf, mit einem parameter, und bekommt die dateidaten zum downoad angeboten.
aber selbst wenn er es könnte - wo wäre das problem? da die datei ja oberhalb des web roots liegt, käme er über http ja doch wieder nicht dran ...
gruss,
wahsaga
Sagt mal, kennt ihr Anbieter, ide es erlauben, oberhalb des Root-Verzeichnisses zu speichern? Bei mir geht das nämlich nur lokal :-(
Danke, Basti
hi,
Man Deine Glaskugel möchte ich mal haben...
wieso, sie taugt doch offenbar recht wenig.
dass es hier wahrscheinlich um ein downloadscript geht, welches einen parameter übergeben bekommt und dann die nicht direkt über http erreichbare datei einfach durchschleust, hat sie ihm ja immer noch nicht verraten können ...
gruss,
wahsaga
Moin Wahsaga
Man Deine Glaskugel möchte ich mal haben...
wieso, sie taugt doch offenbar recht wenig.
dass es hier wahrscheinlich um ein downloadscript geht, welches einen parameter übergeben bekommt und dann die nicht direkt über http erreichbare datei einfach durchschleust, hat sie ihm ja immer noch nicht verraten können ...
Wenn Seine Vermutung aber richtig wäre, dann wäre es doch ein tolles Teil oder nicht?
Viel Spaß noch
TomIRL
du meinst ich war vielleicht zu übereifrig und hätte mal besser zwischen den zeilen lesen sollen ?
asche über mein haupt !!
Man Deine Glaskugel möchte ich mal haben...
wird gerade bei e-bay versteigert (hat´s nicht gebracht)
gruss
m.tietz
Hi,
Du musst unterscheiden zwischen dem Pfad der URL und deines PHP Skripts. Wenn Dein DocumentRoot z.B. /home/www/ ist, dann ist die Datei /home/www/index.php als http://deinedomain.de/index.php verfuegbar. Wenn Du jetzt einen Dateiupload [1] anbietest, musst Du nur beim Aufruf von move_uploaded_file() ein Verzeichnis unterhalb von /home/www angeben.
Gruss,
Jan
[1] http://de3.php.net/manual/en/features.file-upload.php
Also:
Du möchtest dass nicht etwa ein link verschickt werden kann der direkt das Dokument downloaden kann.
Nach dem Motto:
http://www.domain.tld/blablub.pdf
Dazu folgende Checkliste:
Hast Du Zugriff auf Verzeichnisse oberhalb der Dokumentenroot?
Ja/nein
Wenn ja dann siehe Jan
Wenn nein,
hast du die Möglichkeit die Domain in ein Verzeichnis der Dokumentenroot zu verweisen?
Ja /nein
Wenn ja dann Verzeichnis anlegen.
Und einfach oberhalb des Domainverzeichniss ablegen.
Wie siehe Jan..
Wenn Nein dann...
Hast Du die Möglichkeit .htaccess eine entsprechende Umeitlung mit modrewrite zu legen?
Ja /nein
Wenn Ja dann Verzeichnis anlegen.. Mod rewrite benutzen..
Wie? Siehe jan!
Viele Grüße TomIRL