-
Dateidownload schützen
Hallo,
ich habe einen Katalog erstellt, welcher mit den Mitgliedergruppen gekoppelt ist. D.h. momentan bekommen nur diejenigen Mitgliedergruppen Zugriff auf ein einzelnes Element, wenn dieses Element der Gruppe zugeordnet ist. In jedem Element gibt es Downloadelemente, welche nun nur den entsprechenden Mitgliedern angezeigt werden.
Das Problem ist dabei, dass der URL-Pfad im Klartext ist, d.h. ein Mitglied hat z.B. Zugriff auf Element 1, mit dem Download: "tl_files/pdf/datei1.pdf". Nun generiert Contao mittels der file.php den Download der Datei aus dem geschützten Ordner.
Nun könnte ein schlaues Mitglied aber auf die Idee kommen, einfach statt "tl_files/pdf/datei1.pdf" "tl_files/pdf/datei2.pdf" einzugeben und durch Zufall die Datei herunterladen, was natürlich nicht Sinn der Sache ist.
Schön wäre es also, wenn entweder der Dateipfad verschlüsselt ist, oder die Ordner den einzelnen Mitgliedergruppen zugeordnet werden könnten.
Momentan wird das Problem mittels verschlüsselter ZIP-Dateien gelöst.
Nun die Frage: Wie löst man so etwas am effizientesten, ohne allzuviel am momentanen System ändern zu müssen? Ich möchte nun keine Code-Lösungsvorschläge - das wäre zuviel verlangt. Wichtiger wäre es mir einen (möglichst) optimalen Lösungsansatz zu finden und anschließend diesen in Auftrag zu geben.
-
Hallo Nils,
Mitgliedergruppe anlegen, die das PDF sehen darf,
die entsprechende Seite oder Inhaltselement ebenfalls aktivieren mit Häkchen zur jeweiligen Mitgliedergruppe.
Die PDF`s dann in jeweils in den passenden Ordner ablegen, die Ordner in der Dateiverwaltung mit dem Schloßsymbol sichern (legt ja dann die .htaccess an).
Wenn man dann von aussen den direkten Pfad zum PDF eintippt, kommt bei mir der Verweis auf die 403 Seite, die Seite ist dann nicht mehr aufrufbar, vorher schon.
Was mir nicht ganz klar war, dürfen auch innerhalb einer Mitgliedergruppe, die jeweiligen Mitglieder nur bestimmte PDF sehen?
Da müßte man dann eigentlich jedem Mitglied eine eigene Gruppe mit eigenem Ordner zuweisen.
andere Möglichkeit:
http://www.php-faq.de/q-datei-download.html
das habe ich mal eingesetzt vor Ewigkeiten (die Seite lief damals aber nicht in einem CMS)
Kann Dir daher nicht sagen, wie man das handelt wenn die Ordner ausserhalb des Roots liegen. Aber der Ansatz ist bestimmt schon mal richtig.
-
Du redest die ganze Zeit von Mitgliedergruppen, aber redest dann auf einmal von der file.php (liegt unter TL_ROOT/contao), die eigentlich gar nichts damit zu tun hat?
Was du willst ist egtl eine Art Download-Skript, welche die Mitgliedsrechte von Contao verwendet um den Zugang zu Downloadslinks aus einem Katalog zu beschränken?
Sobald du ein Verzeichnis in tl_files schützt via Backend, dann ist das Verzeichnis nach außenhin dicht für alle, wenn sie versuchen die Dateien in dem Ordner direkt über den Webserver zu requesten ("an Contao vorbei"). Es ist außerdem die einzige (?) Möglichkeit Dateien mit nativer (Apache-)Servertechnik zu schützen; erfordert allerdings soweit ich weiß einen Basic/Digest Auth (so ne lustige Popup Box im Browser).
Deswegen nimmt man ein Downloadskript, welches öffentlich erreichbar ist. Dieses bekommt als Argument die zu ladende Datei und natürlich automatisch den ganzen Cookie-Quark (um angemeldete Contao-Mitglieder zu authentifizieren). Dieses Skript spuckt dann nach etwaigen Zugangschecks (Rechte, Gültigkeit, ...) die gewünschte Datei aus (sozusagen an der nativen Protection vorbei).
Diese Technik wird bereits in dem Download-Inhaltselement umgesetzt, vielleicht kannst du dir da ein paar Gedanken holen.
Wenn du noch ne Weile (4-6 Wochen) warten kannst kann ich dir auch eine Download-API für Contao anbieten, welche von der Kernfunktionalität schon soweit fertig ist, allerdings noch einige "hübsch mach"-Arbeiten fehlen. Diese kannst du dann in möglichen Eigenentwicklungen nutzen um nicht den ganzen Datei an Browser schicken Kram selbst zu bauen.
Alternativ gibt es auch eine sehr rudimentäre Methode in der Controller-Klasse namens sendFileToBrowser() oder sowas.
-
Er meinte sicherlich file und nicht file.php, ein Link aus dem Download Element sieht ja so aus:
Code:
http://www.example.com/?file=tl_files/pdf/datei1.pdf
Wenn man nun wie Jenna zu Beginn schreibt den Ordner "pdf" noch mit Contao Mitteln schützt, dann sollte es das schon gewesen sein wenn ich Nils richtig verstanden habe.
-
Richtig, sofern man unterschiedliche Download-Inhaltselemente für jedes Mitglied hat, weil man kann keine einzelnen Dateien schützen