Zum Inhalt springen

Zugangsgeschützte Bereiche im Frontend und Schutz der Bilder

Erstellt am 1. Oktober 2013 · 2 Antworten · letzte Antwort am 2. Oktober 2013

Tags: Dateien & FAL, felogin, Frage

sunixzs ·

Hallo liebes Forum,

da das Thema bei mir gerade ansteht und ich im Netz nichts finden konnte, wollte ich kurz nachfragen, ob es dazu schon etwas gibt oder ob wer eine Idee hat:

Grundsätzlich gibt es im Frontend Bereiche, die erst nach einem Login zu sehen sind. Diese Inhalte kommen aus der Datenbank und sind eigentlich zuverlässig vor Blicken dritter geschützt. Anders sieht es natürlich bei Bildern aus, die im geschützten Content verlinkt sind...

Auch wenn man nicht im Frontend angemeldet ist, können z.B. Bilder per Bild-URL aufgerufen werden. Auf die Bilder selbst bzw. die Ordner wie "fileadmin", "uploads", "typo3temp" gibt es keine Zugriffskontrolle.

Mein erster Ansatz wäre der, dass es einen File-Storage gibt (z.B: "fileadmin/user_upload/private/" ), der per ".htaccess: deny from all" grundsätzlich einen Zugriff vermeidet. Diese Dateien sind weiterhin über das Backend administrierbar.
Immer, wenn auf eine File-Reference im Storage über das Frontend zugegriffen wird, muss der entsprechende Code im Frontend geändert werden. (Dazu gibt es bestimmt einen passenden Hook im Core. Bilder müssten beinahe alle über die imgResource-Methode kommen.)

Beispiel:

<!-- vorher: -->
<img src="fileadmin/user_upload/myProtectedImage.jpg" alt="" width="200" height="100" />
<!-- nachher: -->
<img src="index.php?eID=getProtectedImage&amp;fileReference=X&amp;width=200&amp;height=100" alt="" />

Das Server-Script (eID=getProtectedImage) checkt dann entsprechend, ob der Frontend-User Zugriff auf Inhaltselemente hat, die in Relation zur File-Reference stehen. Wenn Rechte vorhanden, dann wird das Bild gerendert, im geschützten Bereich abgelegt/gecached und die Bild-Daten vom Script ausgeliefert. Anderenfalls kommt ein Fehler 404 oder ein Alternativ-Bild. Auf jeden Fall findet kein direkter Zugriff per http auf das Bild statt.

Evtl. gibt es ja einen ganz anderen Ansatz oder ich liege total daneben. Ich hoffe mein Anliegen ist klar geworden.

Vielen Dank vorab für eure Ideen/Feedback.

Schönen Abend, sun.

Edith sagt:
Es würde wahrscheinlich schon reichen, wenn nicht alle Welt Zugriff auf geschützte Bilder bekommt, sondern nur authentifizierte FrontendUser. Daher müsste folgendes im Script reichen:

  • Ist anzuzeigendes Bild eine FileReference (Stichwort: treatIdAsReference)?

  • Ist diese FileReference aus dem zu schützendem Storage (evtl. per TypoScript einzustellen)?

  • Ist FrontendUser eingeloggt?

  • -> dann Bild rendern und ausliefern.

Alternativ soll das Bild ausgeliefert werden, wenn es keine FileReference ist oder keine FileReference aus dem zu schützenden Storage...

Den Schutz auf FileReferences aus dem Storage für nicht angemeldete FrontendUser zu legen dürfte weitaus resourcenschonender sein als das Referenzieren von FileReferences auf Inhaltselemente, auf die der User Zugriff hat.

sunixzs ·

Moin jenses,

vielen Dank fürs Feedback.

Heute morgen kam mir noch die Idee das Ganze ressourcenschonend per htaccess zu erledigen, indem Zugriff verwehrt wird, wenn der Referer nicht passt.

<IfModule mod_rewrite.c>
RewriteEngine On
 
RewriteCond %{REQUEST_URI} \.(jpg|jpeg|gif|png)$ [NC]
RewriteCond %{REQUEST_URI} /fileadmin/user_upload/protected_files/.*$ [OR]
RewriteCond %{REQUEST_URI} /fileadmin/Resources/.*
RewriteCond %{HTTP_REFERER} !^(http|https)?://(.*)mydomain.tld(.*) [NC]
RewriteRule ^(.*)$ - [F]
</IfModule>

Bzw. für die meisten Dateien:

<IfModule mod_rewrite.c>
RewriteEngine On

RewriteCond %{REQUEST_URI} /fileadmin/.*$ [OR]
RewriteCond %{REQUEST_URI} /typo3temp/.* [OR]
RewriteCond %{REQUEST_URI} /uploads/.*
RewriteCond %{HTTP_REFERER} !^(http|https)?://(.*)mydomain.tld(.*) [NC]
RewriteRule ^(.*)$ - [F]
 
</IfModule>

LG sun