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?
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/
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/
-
- Beiträge: 168
- Registriert: 9. Feb 2005, 20:51
- Wohnort: Bad Nauheim
- Kontaktdaten: Website
- Thomas.Blum
- Entwickler
- Beiträge: 5063
- Registriert: 24. Aug 2004, 22:11
- Wohnort: Dresden
- Kontaktdaten: Website
-
- Beiträge: 168
- Registriert: 9. Feb 2005, 20:51
- Wohnort: Bad Nauheim
- Kontaktdaten: Website
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
www.softloop.biz
- Jan.Kristinus
- Admin
- Beiträge: 2166
- Registriert: 24. Aug 2004, 22:11
- Wohnort: Frankfurt
- Kontaktdaten: ICQ Website
hi,
probier mal das hier:
wenn das klappt bitte im wiki aufnehmen..
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
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);
}
?>
gruss
jan
Yakamara Media GmbH & Co. KG | Kaiserstrasse 69 | 60329 Frankfurt
Tel.: 069-900.20.60.30
http://www.yakamara.de/
Tel.: 069-900.20.60.30
http://www.yakamara.de/
-
- Beiträge: 168
- Registriert: 9. Feb 2005, 20:51
- Wohnort: Bad Nauheim
- Kontaktdaten: Website
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.
Danke für deinen Tipp.
Gruß Florian
www.softloop.biz
www.softloop.biz
- Markus.Staab
- Entwickler
- Beiträge: 9634
- Registriert: 29. Jan 2005, 15:50
- Wohnort: Aschaffenburg/Germany
- Kontaktdaten: ICQ Website
-
- Beiträge: 168
- Registriert: 9. Feb 2005, 20:51
- Wohnort: Bad Nauheim
- Kontaktdaten: Website
Hi Markus,
meinst du im Modul? Hat bei mir nichts gebracht. Das ist doch wahrscheinlich, um die Header nachher wieder zurückzusetzen, oder?
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
www.softloop.biz
- Jan.Kristinus
- Admin
- Beiträge: 2166
- Registriert: 24. Aug 2004, 22:11
- Wohnort: Frankfurt
- Kontaktdaten: ICQ Website
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:
in dem downloadartikel fragst du dann den dateinamen ab: und dann kommt der rest von oben... dann noch - das habe ich ganz vergessen - den mimetype angeben ..
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
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>
Code: Alles auswählen
$file_name=$_REQUEST['dateiname'];
Code: Alles auswählen
$file_type = "application/octetstream";
lg
jan
Yakamara Media GmbH & Co. KG | Kaiserstrasse 69 | 60329 Frankfurt
Tel.: 069-900.20.60.30
http://www.yakamara.de/
Tel.: 069-900.20.60.30
http://www.yakamara.de/
-
- Beiträge: 168
- Registriert: 9. Feb 2005, 20:51
- Wohnort: Bad Nauheim
- Kontaktdaten: Website
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?
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
www.softloop.biz
- Markus.Staab
- Entwickler
- Beiträge: 9634
- Registriert: 29. Jan 2005, 15:50
- Wohnort: Aschaffenburg/Germany
- Kontaktdaten: ICQ Website
Der User kann jede erdenkliche Datei von deinem Webserver herunterladen...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?
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
-
- Beiträge: 168
- Registriert: 9. Feb 2005, 20:51
- Wohnort: Bad Nauheim
- Kontaktdaten: Website
- Jan.Kristinus
- Admin
- Beiträge: 2166
- Registriert: 24. Aug 2004, 22:11
- Wohnort: Frankfurt
- Kontaktdaten: ICQ Website
hi,
noch viel besser ..
wir laden uns jetzt einfach mal die master.inc.php runter
gruss
jan
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/
Tel.: 069-900.20.60.30
http://www.yakamara.de/
- Markus.Staab
- Entwickler
- Beiträge: 9634
- Registriert: 29. Jan 2005, 15:50
- Wohnort: Aschaffenburg/Germany
- Kontaktdaten: ICQ Website
Viel schlimmer ist, das man damit auch die Dateien in denen die Zugangsdaten zu deinem Telnet account etc herunterladen kann.fsiebert1977 hat geschrieben:Argl!
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';
}
Gruß,
Markus
Zuletzt geändert von Markus.Staab am 15. Nov 2005, 16:01, insgesamt 3-mal geändert.
-
- Beiträge: 168
- Registriert: 9. Feb 2005, 20:51
- Wohnort: Bad Nauheim
- Kontaktdaten: Website
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...
Habe das jetzt so implementiert:
Was mache ich falsch? Ich glaub ich hab Tomaten auf den Augen...
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
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);
}
}
?>
Zuletzt geändert von fsiebert1977 am 14. Nov 2005, 19:20, insgesamt 1-mal geändert.
Gruß Florian
www.softloop.biz
www.softloop.biz
- Markus.Staab
- Entwickler
- Beiträge: 9634
- Registriert: 29. Jan 2005, 15:50
- Wohnort: Aschaffenburg/Germany
- Kontaktdaten: ICQ Website
Nein, jede Datei auf dem server.fsiebert1977 hat geschrieben:na toll... auf welche Paßwörter kann es denn Zugriff gegeben haben? Nur REDAXO, oder???
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...
-
- Beiträge: 168
- Registriert: 9. Feb 2005, 20:51
- Wohnort: Bad Nauheim
- Kontaktdaten: Website
-
- Beiträge: 168
- Registriert: 9. Feb 2005, 20:51
- Wohnort: Bad Nauheim
- Kontaktdaten: Website
Ah, jetzt hab ich den Fehler:
Scheint jetzt ok zu sein, oder könnt ihr noch eine Sicherheitslücke entdecken?
Das "\" musste ja noch escaped werden.if ( strpos( $fileName, '..') === false && strpos( $fileName, '/') === false && strpos( $fileName, '\\') === false) {
echo 'Alles ok';
// hier Datei an Browser schicken.
} else {
echo 'Angriff';
}
Scheint jetzt ok zu sein, oder könnt ihr noch eine Sicherheitslücke entdecken?
Gruß Florian
www.softloop.biz
www.softloop.biz
- Markus.Staab
- Entwickler
- Beiträge: 9634
- Registriert: 29. Jan 2005, 15:50
- Wohnort: Aschaffenburg/Germany
- Kontaktdaten: ICQ Website
-
- Beiträge: 168
- Registriert: 9. Feb 2005, 20:51
- Wohnort: Bad Nauheim
- Kontaktdaten: Website