Geschützte Downloadbereiche (upload/myFolder) wie Categorie?
Geschützte Downloadbereiche (upload/myFolder) wie Categorie?
Hallo
mit Freude habe ich festgestellt, dass im neuen Contenido 4.6.2 geschützte Kategorien verfügbar sind.
Nun möchte ich in einer solchen geschützten Seite auch File-Downloads anbieten. Nun habe ich das Problem, dass ein solcher Download (z. B. upload/MyFolder/MyFile.pdf) allen als hidden link offen steht.
Nun sehe ich folgende Möglichkeiten (mit Vor-/Nachteilen):
a) als hidden link belassen und hoffen niemand weiss es
b) upload/MyFolder mit .htaccess zu schützen, der Benutzer muss sich dann aber 2x einloggen.
c) dbfs verwenden. Hier kann ich aber nicht zwischen den einzelnen Forntend-Benutzergruppen unterscheiden. Btw: der link wird im TinyMCE nicht auf dbfs.php?file=upload/MyFolder/MyFile.pdf gesetzt, sondern upload/dbfs:/MyFolder/MyFile.pdf
d) Ein weiterer Workaround wäre hierzu einen eigenen Mandanten anzulegen, welcher mit .htaccess geschützt ist, aber das ist unschön! Unter 4.4.4 ging es aber auch nicht anders.
Wie geht ihr mit diesem Problem um?
Am liebsten wäre mir c) mit feingranularen privileges.
Any other ideas?!? Comments?!? Auf 4.7 warten?
Gruss
Martin
mit Freude habe ich festgestellt, dass im neuen Contenido 4.6.2 geschützte Kategorien verfügbar sind.
Nun möchte ich in einer solchen geschützten Seite auch File-Downloads anbieten. Nun habe ich das Problem, dass ein solcher Download (z. B. upload/MyFolder/MyFile.pdf) allen als hidden link offen steht.
Nun sehe ich folgende Möglichkeiten (mit Vor-/Nachteilen):
a) als hidden link belassen und hoffen niemand weiss es
b) upload/MyFolder mit .htaccess zu schützen, der Benutzer muss sich dann aber 2x einloggen.
c) dbfs verwenden. Hier kann ich aber nicht zwischen den einzelnen Forntend-Benutzergruppen unterscheiden. Btw: der link wird im TinyMCE nicht auf dbfs.php?file=upload/MyFolder/MyFile.pdf gesetzt, sondern upload/dbfs:/MyFolder/MyFile.pdf
d) Ein weiterer Workaround wäre hierzu einen eigenen Mandanten anzulegen, welcher mit .htaccess geschützt ist, aber das ist unschön! Unter 4.4.4 ging es aber auch nicht anders.
Wie geht ihr mit diesem Problem um?
Am liebsten wäre mir c) mit feingranularen privileges.
Any other ideas?!? Comments?!? Auf 4.7 warten?
Gruss
Martin
ok wir haben das problem folgendermaßen gelöst:
eine .htaccess reingelegt und geschützt.
den link statt regulär mit "upload/datei.pdf" anzusteuern durch die front content gejagt - also so: front_content.php?idartlang=23&file=upload/datei.pdf
der artikel selbst liegt über contenido geschützt und beinhaltet nur ein modul (nix anderes, also kein html oder leerzeichengedöns) und liest mit readfile() die datei ein. so ist sichergestellt dass nur die usergruppen zugriff zum artikel idartlang erhalten die über die frontenduserrechte zugang erhalten dürfen.
nachteil dieser version: der download auf diese art klappt perfekt, wenn man die datei allerdings im programm öffnet (also öffnen beim speichern unter dialog bei den pdfs wählt) dann wird nix angezeigt, da das programm (hier acrobat) keine rechte hat diesen artikel anzuzeigen. wir haben es mit einem hinweis über dem download gelöst, der die besucher auffordert die datei zwischenzuspeichern.
eine .htaccess reingelegt und geschützt.
den link statt regulär mit "upload/datei.pdf" anzusteuern durch die front content gejagt - also so: front_content.php?idartlang=23&file=upload/datei.pdf
der artikel selbst liegt über contenido geschützt und beinhaltet nur ein modul (nix anderes, also kein html oder leerzeichengedöns) und liest mit readfile() die datei ein. so ist sichergestellt dass nur die usergruppen zugriff zum artikel idartlang erhalten die über die frontenduserrechte zugang erhalten dürfen.
nachteil dieser version: der download auf diese art klappt perfekt, wenn man die datei allerdings im programm öffnet (also öffnen beim speichern unter dialog bei den pdfs wählt) dann wird nix angezeigt, da das programm (hier acrobat) keine rechte hat diesen artikel anzuzeigen. wir haben es mit einem hinweis über dem download gelöst, der die besucher auffordert die datei zwischenzuspeichern.
Hallo Stese,
das schein mir eine sehr elegante Lösung zu sein! Wenn ich das richtig verstehe, können so die normalen Contenido-Rechte verwendet werden und das ganze ist erst noch Release-fähig.
Darf ich nochmals rekapitulieren?
1) ich mache Layout mit nur CMS_CONTENT[1] bzw. dem neuen <container>...</container>
2) Das Modul enthält in etwa: <?php readfile($file); ?>
(du hast nicht grad den src zur Hand?)
Frage:
- wie geht ihr mit den Header und v.a. MIME-Settings um?
- aus security-Gründen erlaubt das Modul wahrscheinlich nur downloads aus /upload/...
- anything else to think of?
Gruss
Martin
PS: Unter folgener URL hats eine ganze Reihe von Bsp. der Header settings.
http://php.benscom.com/manual/en/function.readfile.php
das schein mir eine sehr elegante Lösung zu sein! Wenn ich das richtig verstehe, können so die normalen Contenido-Rechte verwendet werden und das ganze ist erst noch Release-fähig.
Darf ich nochmals rekapitulieren?
1) ich mache Layout mit nur CMS_CONTENT[1] bzw. dem neuen <container>...</container>
2) Das Modul enthält in etwa: <?php readfile($file); ?>
(du hast nicht grad den src zur Hand?)
Frage:
- wie geht ihr mit den Header und v.a. MIME-Settings um?
- aus security-Gründen erlaubt das Modul wahrscheinlich nur downloads aus /upload/...
- anything else to think of?
Gruss
Martin
PS: Unter folgener URL hats eine ganze Reihe von Bsp. der Header settings.
http://php.benscom.com/manual/en/function.readfile.php
korrekt - im layout ist ein einziger container dem folgendes modul zugewiesen wird:
es wird der header vom type application/force-download genommen, damit auch browser übergreifend das speichern unter fenster kommt - wenn man den korrekten header der applikation nimmt, versucht der browser ja die datei in der applikation zu laden, was nicht funktionieren wird (wegen der fehlenden rechte der applikation in contenido)
security geschichten habe ich derzeit nicht eingebaut, (also das entfernen von ../ - das kannst du ja manuell noch reinschreiben)
ich habe dieses modul in einer erweiterten variante im einsatz, die mir jeden download als logfile mit eingeloggtem benutzer und pfad etc in ein datenbank logfile schreibt, so kann ich später rekapitulieren, wer was runtergeladen hat (oder auch wer scheisse angestellt hat )
Code: Alles auswählen
<?php
// hier pfad zum upload folder angeben, damit url kurz gehalten wird
// z.b. front_content.php?idartlang=23&filepath=filename.pdf
// sucht die datei in upload/securefiles/filename.pdf
$upload_path = 'upload/securefiles/';
$arr_path_parts = array();
// wurde eine seite übergeben?
if ( isset($_GET["filepath"]) && !empty($_GET["filepath"]) ) {
$str_filepath = $upload_path . $_GET["filepath"];
$arr_path_parts = pathinfo($_GET["filepath"]);
$str_file = $arr_path_parts['basename'];
$size = filesize($str_filepath);
// erzinge das speichern unter fenster
header('Content-type: application/force-download');
// benne downloadnamen
header('Content-Disposition: attachment; filename="' . $str_file . '"');
header("Content-Transfer-Encoding: binary");
header("Content-Length: " . $size);
// lese datei ein ...
readfile($str_filepath);
}
?>
security geschichten habe ich derzeit nicht eingebaut, (also das entfernen von ../ - das kannst du ja manuell noch reinschreiben)
ich habe dieses modul in einer erweiterten variante im einsatz, die mir jeden download als logfile mit eingeloggtem benutzer und pfad etc in ein datenbank logfile schreibt, so kann ich später rekapitulieren, wer was runtergeladen hat (oder auch wer scheisse angestellt hat )
Das ist eine sehr schöne Lösung, da man damit vermutlich auch unterschiedliche Gruppen unterschiedlich berechtigen kann.
Alternativ besteht die Möglichkeit, das DBFS-System zu nutzen und Dateien daraus nur angemeldeten (aber dann allen) Usern zugänglich zu machen (da gibt es einen Haken in den Eigenschaften der Datei in der Dateiverwaltung). Der Verweis zum Erhalt der Datei geht dann auf <Mandanten-Verzeichnis>/dbfs.php?file=<Dateiname>
Gruß
HerrB
Alternativ besteht die Möglichkeit, das DBFS-System zu nutzen und Dateien daraus nur angemeldeten (aber dann allen) Usern zugänglich zu machen (da gibt es einen Haken in den Eigenschaften der Datei in der Dateiverwaltung). Der Verweis zum Erhalt der Datei geht dann auf <Mandanten-Verzeichnis>/dbfs.php?file=<Dateiname>
Gruß
HerrB
Bitte keine unaufgeforderten PMs oder E-Mails -> use da Forum!
Newsletter: V4.4.x | V4.6.0-15 (Module, Backend) | V4.6.22+
Standardartikelliste: V4.4.x | V4.6.x
http://www.contenido.org/forum/search.php | http://faq.contenido.org | http://www.communido.net
Newsletter: V4.4.x | V4.6.0-15 (Module, Backend) | V4.6.22+
Standardartikelliste: V4.4.x | V4.6.x
http://www.contenido.org/forum/search.php | http://faq.contenido.org | http://www.communido.net
geschützes Verzeichnis und Download-Liste
Hallo Stese,
auch ich möchte pdf-Daten im geschützten Bereich als Download zur Verfügung stellen. Ich nutze dort das Modul Download-Liste von dir. Kann man dies mit der eleganten Lösung von oben kombinieren? Wenn ja, wie?
Ist es egal, was in der .htaccess steht? Ich kann Verzeichnisse über ein Webinterface meines Anbieters schützen, so dass ich die .htaccess garnicht zu sehen bekomme.
Viele Grüße
Knigge
auch ich möchte pdf-Daten im geschützten Bereich als Download zur Verfügung stellen. Ich nutze dort das Modul Download-Liste von dir. Kann man dies mit der eleganten Lösung von oben kombinieren? Wenn ja, wie?
Ist es egal, was in der .htaccess steht? Ich kann Verzeichnisse über ein Webinterface meines Anbieters schützen, so dass ich die .htaccess garnicht zu sehen bekomme.
Viele Grüße
Knigge
hallo,
das gleiche dürfte mit der download liste von mir funktionieren - den artikel, der die downloads praktisch ausführt einfach in eine geschützte kategorie legen - dann kommt vor dem eigentlichen laden der datei die passwort abfrage - so zumindestens theoretisch ... getestet habe ich es jetzt nicht.
das verzeichnis kannst du mit irgend einer .htaccess datei schützen - theoretisch brauchst du dann nicht mal ein valides passwort - aber achtung: wenn du in dieses verzeichnis was hochladen willst, kann es passieren dass die pw abfrage kommt - so ganz genau kann ich dir das momentan nicht sagen
das gleiche dürfte mit der download liste von mir funktionieren - den artikel, der die downloads praktisch ausführt einfach in eine geschützte kategorie legen - dann kommt vor dem eigentlichen laden der datei die passwort abfrage - so zumindestens theoretisch ... getestet habe ich es jetzt nicht.
das verzeichnis kannst du mit irgend einer .htaccess datei schützen - theoretisch brauchst du dann nicht mal ein valides passwort - aber achtung: wenn du in dieses verzeichnis was hochladen willst, kann es passieren dass die pw abfrage kommt - so ganz genau kann ich dir das momentan nicht sagen
Suchmaschinenfreundliche URLS durch Advanced ModRewrite 4.6.x
Module: Modul Download Liste 4.6 | Halbautomatischer Artikel-Seitenwechsel 4.6.x
Amazon Wunschzettel
Module: Modul Download Liste 4.6 | Halbautomatischer Artikel-Seitenwechsel 4.6.x
Amazon Wunschzettel
Also irgendwie funktioniert das bei mir nicht so wie es soll.
Habe einen Artikel mit dem neuen Layout, welches nur das gepostete Modul enthält, angelegt.
Wenn ich dann einen Link setze wie beschrieben, erhalte ich folgende Fehlermeldung:
Was mach ich da falsch, wieso wird die Datei nicht gespeichert bzw. geöffnet?
Noch ne zweite Frage:
Muss der Link (z.B. front_content.php?idartlang=23&filepath=filename.pdf) eigentlich die idartlang haben, oder kann ich es auch mit der idart machen?
Gruß
Christian
Habe einen Artikel mit dem neuen Layout, welches nur das gepostete Modul enthält, angelegt.
Wenn ich dann einen Link setze wie beschrieben, erhalte ich folgende Fehlermeldung:
Im Anschluß an die Meldung wird die Seite mit Sonderzeichen vollgeschrieben. Dies ist PDF Datei, wie wenn sie mit dem Editor von Windows geöffnet wird.Warning: Cannot modify header information - headers already sent by (output started at /mnt/kw2/05/913/00000007/htdocs/v30/cms/front_content.php(792) : eval()'d code:9) in /mnt/kw2/05/913/00000007/htdocs/v30/cms/front_content.php(792) : eval()'d code on line 30
Warning: Cannot modify header information - headers already sent by (output started at /mnt/kw2/05/913/00000007/htdocs/v30/cms/front_content.php(792) : eval()'d code:9) in /mnt/kw2/05/913/00000007/htdocs/v30/cms/front_content.php(792) : eval()'d code on line 33
Warning: Cannot modify header information - headers already sent by (output started at /mnt/kw2/05/913/00000007/htdocs/v30/cms/front_content.php(792) : eval()'d code:9) in /mnt/kw2/05/913/00000007/htdocs/v30/cms/front_content.php(792) : eval()'d code on line 35
Warning: Cannot modify header information - headers already sent by (output started at /mnt/kw2/05/913/00000007/htdocs/v30/cms/front_content.php(792) : eval()'d code:9) in /mnt/kw2/05/913/00000007/htdocs/v30/cms/front_content.php(792) : eval()'d code on line 36
Was mach ich da falsch, wieso wird die Datei nicht gespeichert bzw. geöffnet?
Noch ne zweite Frage:
Muss der Link (z.B. front_content.php?idartlang=23&filepath=filename.pdf) eigentlich die idartlang haben, oder kann ich es auch mit der idart machen?
Gruß
Christian
Aktiviere das Debugging (siehe contenido/config.misc.php) und suche die Stelle mit der Fehlermeldung.
Gruß
HerrB
Gruß
HerrB
Bitte keine unaufgeforderten PMs oder E-Mails -> use da Forum!
Newsletter: V4.4.x | V4.6.0-15 (Module, Backend) | V4.6.22+
Standardartikelliste: V4.4.x | V4.6.x
http://www.contenido.org/forum/search.php | http://faq.contenido.org | http://www.communido.net
Newsletter: V4.4.x | V4.6.0-15 (Module, Backend) | V4.6.22+
Standardartikelliste: V4.4.x | V4.6.x
http://www.contenido.org/forum/search.php | http://faq.contenido.org | http://www.communido.net
Habe ich gemacht und das ist der Code der in den Zeilen steht:
Das ist 1 zu 1 der Code von oben, ohne eine Änderung.Zeile 28: // erzinge das speichern unter fenster
Zeile 29: header('Content-type: application/force-download');
Zeile 30:
Zeile 31: // benne downloadnamen
Zeile 32: header('Content-Disposition: attachment; filename="' . $str_file . '"');
Zeile 33:
Zeile 34: header("Content-Transfer-Encoding: binary");
Zeile 35: header("Content-Length: " . $size);
Zeile 36:
Zeile 37: // lese datei ein ...
Zeile 38: readfile($str_filepath);
ja weil dort der header versucht wird zu setzen.
ich schätze du hast den thread auch korrekt durchgelesen? vor allem diesen teil:
ich schätze du hast den thread auch korrekt durchgelesen? vor allem diesen teil:
also NICHTS, wirklich gar nichts darf in deinem layout vor dem modul stehender artikel selbst liegt über contenido geschützt und beinhaltet nur ein modul (nix anderes, also kein html oder leerzeichengedöns) und liest mit readfile() die datei ein. so ist sichergestellt dass nur die usergruppen zugriff zum artikel idartlang erhalten die über die frontenduserrechte zugang erhalten dürfen.
Suchmaschinenfreundliche URLS durch Advanced ModRewrite 4.6.x
Module: Modul Download Liste 4.6 | Halbautomatischer Artikel-Seitenwechsel 4.6.x
Amazon Wunschzettel
Module: Modul Download Liste 4.6 | Halbautomatischer Artikel-Seitenwechsel 4.6.x
Amazon Wunschzettel
-
- Beiträge: 847
- Registriert: Mi 14. Dez 2005, 16:15
- Wohnort: Königs Wusterhausen bei Berlin
- Kontaktdaten:
Hallo,
es ist mir ja fast peinlich, aber ich habe diesen Artikel jetzt bestimmt 7 mal gelesen und mir stellen sich immer mehr Fragen, vielleicht könnt Ihr mir helfen.
1. Was muss denn in die htaccess rein? Nur eine leere .htaccess hat ja keinen Effekt.
Muss ich denn noch eine .htusers oder .htgroups, bzw. ein .htpasswd anlegen? Es soll das Verzeichnis upload/intern gesichert werden!
2. Das gepostete Modul kommt doch dann in mein Intern-Download-Template, oder? Also muss es doch, oder!
Ich habe ein Layout blanko angelegt mit dem Inhalt CMS_CONTAINER[1], dann habe ich das oben genannte Modul angelegt. Und dieses Modul habe ich in mein Intern-Download-Template eingefügt, ganz am Anfang (natürlich ist in diesem Template auch meine Navi, das Downloadmodul von stese etc. drin) aber warum musste ich denn ein leeres Layout anlegen? Hierzu gibt es ja gar kein Bezug mehr. Also denke ich irgendwo einen Fehler gemacht zu haben.
Sorry fürs Nachfragen.
Ach übrigens soll das in einer 4.6.15 MR laufen!
Danke schon mal
Steffen
es ist mir ja fast peinlich, aber ich habe diesen Artikel jetzt bestimmt 7 mal gelesen und mir stellen sich immer mehr Fragen, vielleicht könnt Ihr mir helfen.
1. Was muss denn in die htaccess rein? Nur eine leere .htaccess hat ja keinen Effekt.
Muss ich denn noch eine .htusers oder .htgroups, bzw. ein .htpasswd anlegen? Es soll das Verzeichnis upload/intern gesichert werden!
2. Das gepostete Modul kommt doch dann in mein Intern-Download-Template, oder? Also muss es doch, oder!
Ich habe ein Layout blanko angelegt mit dem Inhalt CMS_CONTAINER[1], dann habe ich das oben genannte Modul angelegt. Und dieses Modul habe ich in mein Intern-Download-Template eingefügt, ganz am Anfang (natürlich ist in diesem Template auch meine Navi, das Downloadmodul von stese etc. drin) aber warum musste ich denn ein leeres Layout anlegen? Hierzu gibt es ja gar kein Bezug mehr. Also denke ich irgendwo einen Fehler gemacht zu haben.
Sorry fürs Nachfragen.
Ach übrigens soll das in einer 4.6.15 MR laufen!
Danke schon mal
Steffen
Hi,
schau' mal hier: http://www.contenido.org/forum/viewtopic.php?t=17769
Ich mache da was ganz ähnliches, da ist das mit der .htaccess und dem Layout erklärt.
.htgroups usw. braucht es nicht, weil die dort beschriebene .htaccess JEDEN Zugriff 'von aussen' unterbindet.
Viel Erfolg
Tino
schau' mal hier: http://www.contenido.org/forum/viewtopic.php?t=17769
Ich mache da was ganz ähnliches, da ist das mit der .htaccess und dem Layout erklärt.
.htgroups usw. braucht es nicht, weil die dort beschriebene .htaccess JEDEN Zugriff 'von aussen' unterbindet.
Viel Erfolg
Tino
Für die Freizeit : www.hobbybrauer.de