[phpBB Debug] PHP Warning: in file [ROOT]/ext/tas2580/seourls/event/listener.php on line 213: Undefined array key "FORUM_NAME"
Download-Modul mit erzwungenem (forced) download - REDAXO Forum
Hallo,

Wir haben in letzter Zeit festgestellt, dass die Kommunikation via Slack viel schneller und zielführender ist als ein Beitrag im Forum. Aufgrund der neuen und besseren Möglichkeiten der Kommunikation haben wir uns entschlossen das Forum nur noch als Archiv zur Verfügung zu stellen. Somit bleibt es weiterhin möglich hier nach Lösungen zu suchen. Neue Beiträge können nicht mehr erstellt werden.

Wir empfehlen, für deine Fragen/Probleme Slack zu nutzen. Dort sind viele kompetente Benutzer aktiv und beantworten jegliche Fragen, gerne auch von REDAXO-Anfängern! Slack wird von uns sehr intensiv und meistens "rund um die Uhr" benutzt :-)
Selbst einladen kannst Du dich hier: https://redaxo.org/slack/
fsiebert1977
Beiträge: 168
Registriert: 9. Feb 2005, 20:51
Wohnort: Bad Nauheim
Kontaktdaten: Website

Download-Modul mit erzwungenem (forced) download

14. Nov 2005, 13:58

Hi zusammen,

wie könnte man ein Downloadmodul machen, bei dem browser- und dateiunabhängig beim Klick auf den Downloadlink ein Download durchgeführt wird? Normalerweise ist es ja so, dass z.B. beim Link auf ein JPEG, dieses beim Klicken auf den Link einfach im Browser angezeigt wird. Ich möchte aber gerne, dass sich ein Download-Dialog öffnet. Das ist doch bestimmt irgendwie per PHP möglich, oder?

Hat jemand eine Idee?
Gruß Florian
www.softloop.biz

Benutzeravatar
Thomas.Blum
Entwickler
Beiträge: 5063
Registriert: 24. Aug 2004, 22:11
Wohnort: Dresden
Kontaktdaten: Website

14. Nov 2005, 14:47

Hej,

ale Dateien als zip oder rar komprimiert abspeichern.

Thomas

fsiebert1977
Beiträge: 168
Registriert: 9. Feb 2005, 20:51
Wohnort: Bad Nauheim
Kontaktdaten: Website

14. Nov 2005, 15:02

Es gibt doch bestimmt auch eine andere Methode, oder? Ich habe gelesen, dass man das irgendwie über Header-Informationen machen kann. Da gibt es irgendwie sowas wie content:application-x/download.
Gruß Florian
www.softloop.biz

Benutzeravatar
Jan.Kristinus
Admin
Beiträge: 2166
Registriert: 24. Aug 2004, 22:11
Wohnort: Frankfurt
Kontaktdaten: ICQ Website

14. Nov 2005, 16:29

hi,

probier mal das hier:
wenn das klappt bitte im wiki aufnehmen..

Code: Alles auswählen

<?php

header("Expires: Mon, 01 Jan 2000 05:00:00 GMT"); // Date in the past
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");// always modified
header("Cache-Control: no-store, no-cache, must-revalidate");// HTTP/1.1
header("Cache-Control: post-check=0, pre-check=0", false);
header("Cache-Control: private");
header("Pragma: no-cache");

header("Content-Type: $file_type; name=\"$file_name\"");
header("Content-Disposition: attachment; filename=\"$file_name\"");

// hier kommt die datei als rohdatei
if ($fp = fopen ("$file_path", "r"))
{
  fpassthru ($fp);
  fclose($fp);
}

?>
vorher noch den dateinamen übernehmen und kontrolle ob der dateiname nicht auf unerlaubte bereiche zugreift.. stell dir z.b. mal einen dateinamen vor der "/etc/xyz" oder so heisst ...

gruss
jan
Yakamara Media GmbH & Co. KG | Kaiserstrasse 69 | 60329 Frankfurt
Tel.: 069-900.20.60.30
http://www.yakamara.de/

fsiebert1977
Beiträge: 168
Registriert: 9. Feb 2005, 20:51
Wohnort: Bad Nauheim
Kontaktdaten: Website

14. Nov 2005, 17:11

Hmmm... kann man das einfach so in ein Modul packen? Bei mir setzt er dann den Header schon, wenn man die Downloadseite aufruft und lässt einen gleich die nächstbeste Datei runterladen ;) Oder muss man das ganze in eine Funktion wursteln und diese dann über den Downloadlink aufrufen? Und wenn ja, wie werden die Headerdaten dann wieder zurückgesetzt?

Danke für deinen Tipp.
Gruß Florian
www.softloop.biz

Benutzeravatar
Markus.Staab
Entwickler
Beiträge: 9634
Registriert: 29. Jan 2005, 15:50
Wohnort: Aschaffenburg/Germany
Kontaktdaten: ICQ Website

14. Nov 2005, 17:19

Hi,

vor den headern noch ein ob_clean(); machen

Gruß,
Markus

fsiebert1977
Beiträge: 168
Registriert: 9. Feb 2005, 20:51
Wohnort: Bad Nauheim
Kontaktdaten: Website

14. Nov 2005, 17:36

Hi Markus,

meinst du im Modul? Hat bei mir nichts gebracht. Das ist doch wahrscheinlich, um die Header nachher wieder zurückzusetzen, oder?
Gruß Florian
www.softloop.biz

Benutzeravatar
Jan.Kristinus
Admin
Beiträge: 2166
Registriert: 24. Aug 2004, 22:11
Wohnort: Frankfurt
Kontaktdaten: ICQ Website

14. Nov 2005, 17:43

hi,

das laeuft über einen umweg..

1. du erstellst einen artikel .. dieser ist dann dein downloadartikel..
2. du erstellst ein modul in welchem der link nicht direkt auf die datei geht, sondern auf diesen downloadartikel. in dem link übergibst du den dateinamen (REX_LINK[1]) insgesamt etwa sowas:

Code: Alles auswählen

<a href=index.php?article_id=XX&dateiname=REX_LINK[1]>REX_LINK[1]</a>
in dem downloadartikel fragst du dann den dateinamen ab:

Code: Alles auswählen

$file_name=$_REQUEST['dateiname'];
und dann kommt der rest von oben... dann noch - das habe ich ganz vergessen - den mimetype angeben ..

Code: Alles auswählen

$file_type = "application/octetstream";
das ist keine redaxo funktion die du hier verwendest, sondern einfach nur php.. das ist auch das schoene (und manchmal das schwierige) an redaxo.. du kannst deinen eigenen php code verwenden und dir eigene loesungen überlegen und bist nicht festgelegt..

lg

jan
Yakamara Media GmbH & Co. KG | Kaiserstrasse 69 | 60329 Frankfurt
Tel.: 069-900.20.60.30
http://www.yakamara.de/

fsiebert1977
Beiträge: 168
Registriert: 9. Feb 2005, 20:51
Wohnort: Bad Nauheim
Kontaktdaten: Website

14. Nov 2005, 18:50

Super Klasse! Hat funktioniert :)
Zu bestaunen hier: http://paddocks.softloop.biz/index.php? ... 14&clang=0

Ich habe noch ein Auslesen der Dateigröße integriert, damit der Benutzer weiss, wie groß die Datei ist, die er gerade downloadet.

Hier mein Eintrag im Wiki: http://wiki3.redaxo.de/index.php?n=R3.ForcedDownload

Vielen Dank für die Hilfe!

PS. Getestet ist das ganze in IE 6.0, Firefox und Safari. Was ich jetzt nicht getestet habe, ist das mit dem Zugriff auf unerlaubte Verzeichnisse. Was genau kann da passieren?
Gruß Florian
www.softloop.biz

Benutzeravatar
Markus.Staab
Entwickler
Beiträge: 9634
Registriert: 29. Jan 2005, 15:50
Wohnort: Aschaffenburg/Germany
Kontaktdaten: ICQ Website

14. Nov 2005, 18:56

fsiebert1977 hat geschrieben:PS. Getestet ist das ganze in IE 6.0, Firefox und Safari. Was ich jetzt nicht getestet habe, ist das mit dem Zugriff auf unerlaubte Verzeichnisse. Was genau kann da passieren?
Der User kann jede erdenkliche Datei von deinem Webserver herunterladen...

du musst sicherstellen, dass keine ".." und keine "/" in dem Dateinamen vorhanden sind...

z.b. kann ich die index.php von redaxo herunterladen:
http://paddocks.softloop.biz/index.php? ... /index.php

Gruß,
Markus

fsiebert1977
Beiträge: 168
Registriert: 9. Feb 2005, 20:51
Wohnort: Bad Nauheim
Kontaktdaten: Website

14. Nov 2005, 19:00

Argl! :oops:
Gruß Florian
www.softloop.biz

Benutzeravatar
Jan.Kristinus
Admin
Beiträge: 2166
Registriert: 24. Aug 2004, 22:11
Wohnort: Frankfurt
Kontaktdaten: ICQ Website

14. Nov 2005, 19:02

hi,

noch viel besser ..
wir laden uns jetzt einfach mal die master.inc.php runter ;)

gruss

jan
Yakamara Media GmbH & Co. KG | Kaiserstrasse 69 | 60329 Frankfurt
Tel.: 069-900.20.60.30
http://www.yakamara.de/

Benutzeravatar
Markus.Staab
Entwickler
Beiträge: 9634
Registriert: 29. Jan 2005, 15:50
Wohnort: Aschaffenburg/Germany
Kontaktdaten: ICQ Website

14. Nov 2005, 19:02

fsiebert1977 hat geschrieben:Argl! :oops:
Viel schlimmer ist, das man damit auch die Dateien in denen die Zugangsdaten zu deinem Telnet account etc herunterladen kann.

Das MUSS dicht gemacht sein!!

Code: Alles auswählen

if ( strpos( $fileName, '..')  === false && strpos( $fileName, '/') === false && strpos( $fileName, '\\') === false) {
  echo 'Alles ok';
  // hier Datei an Browser schicken.
} else {
  echo 'Angriff';
}
Nach dem Ändern des Codes, alle Passwörter ändern...

Gruß,
Markus
Zuletzt geändert von Markus.Staab am 15. Nov 2005, 16:01, insgesamt 3-mal geändert.

fsiebert1977
Beiträge: 168
Registriert: 9. Feb 2005, 20:51
Wohnort: Bad Nauheim
Kontaktdaten: Website

14. Nov 2005, 19:13

na toll... auf welche Paßwörter kann es denn Zugriff gegeben haben? Nur REDAXO, oder???

Irgendwie spuckt er jetzt nur noch ne Fehlermeldung aus...

Code: Alles auswählen

Parse error: parse error, unexpected $ in /var/www/vhosts/softloop.biz/subdomains/paddocks/httpdocs/redaxo/include/classes/class.article.inc.php(176) : eval()'d code on line 29
Habe das jetzt so implementiert:

Code: Alles auswählen

<?php
$fileName= $_REQUEST['fileName'];
$fileType = "application/x-download";
$filePath = $REX[HTDOCS_PATH].'files/'.$fileName;
$cLength = filesize($filePath); //store filesize for user information

if ( strpos( $fileName, '..') === false && strpos( $fileName, '/') === false && strpos( $fileName, '\') === false) {
header("Expires: Mon, 01 Jan 2000 05:00:00 GMT"); // Date in the past
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");// always modified
header("Cache-Control: no-store, no-cache, must-revalidate");// HTTP/1.1
header("Cache-Control: post-check=0, pre-check=0", false);
header("Cache-Control: private");
header("Pragma: no-cache");

header("Content-Type: $fileType; name=\"$fileName\"");
header("Content-Disposition: attachment; filename=\"$fileName\"");
header("Content-Length: ".$cLength);

// here the file as raw data
if ($fp = fopen ("$filePath", "r"))
{
  fpassthru ($fp);
  fclose($fp);
}

} 


?>
Was mache ich falsch? Ich glaub ich hab Tomaten auf den Augen... :)
Zuletzt geändert von fsiebert1977 am 14. Nov 2005, 19:20, insgesamt 1-mal geändert.
Gruß Florian
www.softloop.biz

Benutzeravatar
Markus.Staab
Entwickler
Beiträge: 9634
Registriert: 29. Jan 2005, 15:50
Wohnort: Aschaffenburg/Germany
Kontaktdaten: ICQ Website

14. Nov 2005, 19:19

fsiebert1977 hat geschrieben:na toll... auf welche Paßwörter kann es denn Zugriff gegeben haben? Nur REDAXO, oder???
Nein, jede Datei auf dem server.

versuch halt mal hinten mit /etc/hosts o.ä.....

schon der alleinige Zugriff auf die master.inc.php würde dazu führen, dass wir deine mysql Datenbankinfos hätten. Jetzt muss man nur noch den phpmyadmin finden, und schon kann man deine ganze Seite editieren...

Wegen dem Parse error:
Naja das sollte ja mal kein Problem sein...

fsiebert1977
Beiträge: 168
Registriert: 9. Feb 2005, 20:51
Wohnort: Bad Nauheim
Kontaktdaten: Website

14. Nov 2005, 19:22

da muss man ja echt höllisch aufpassen...
Gruß Florian
www.softloop.biz

fsiebert1977
Beiträge: 168
Registriert: 9. Feb 2005, 20:51
Wohnort: Bad Nauheim
Kontaktdaten: Website

14. Nov 2005, 19:34

Ah, jetzt hab ich den Fehler:
if ( strpos( $fileName, '..') === false && strpos( $fileName, '/') === false && strpos( $fileName, '\\') === false) {
echo 'Alles ok';
// hier Datei an Browser schicken.
} else {
echo 'Angriff';
}
Das "\" musste ja noch escaped werden.

Scheint jetzt ok zu sein, oder könnt ihr noch eine Sicherheitslücke entdecken?
Gruß Florian
www.softloop.biz

Benutzeravatar
Markus.Staab
Entwickler
Beiträge: 9634
Registriert: 29. Jan 2005, 15:50
Wohnort: Aschaffenburg/Germany
Kontaktdaten: ICQ Website

14. Nov 2005, 19:52

ich glaub "~" muss noch raus.

"~" steht bei linux für das home verz des aktuellen users...

fsiebert1977
Beiträge: 168
Registriert: 9. Feb 2005, 20:51
Wohnort: Bad Nauheim
Kontaktdaten: Website

14. Nov 2005, 21:51

Habs korrigiert (auch im Wiki)
Gruß Florian
www.softloop.biz

Zurück zu „Allgemeines [R3]“