Direkten Zugriff auf Datei unterbinden, nur per Skript erlauben

FlorianWo

Grünschnabel
Moin allerseits!

Ich habe vor einiger Zeit die Facharbeit zum "Funktionsprinzip des Segway" verfasst und improvisiert unter http://www.cer-online.de/Facharbeit/ online gestellt.
Nun ist das Problem, dass die PDF-Datei der Facharbeit dort verlinkt ist auf http://www.cer-online.de/Facharbeit/Facharbeit.pdf.
Sobald ein Surfer auf http://www.cer-online.de/Facharbeit/ kommt, wird der Zähler für die Besucher bzw. Views hochgesetzt.
Wird allerdings z.B. in Foren auf meine Facharbeit verlinkt, wird meistens der Direktlink auf http://www.cer-online.de/Facharbeit/Facharbeit.pdf genommen, was den Zähler leider umgeht.
In meinen Server-Logfiles kann ich einen deutlichen Unterschied von vom Server gezählten und vom PHP-Skript gezählten Views erkennen.

Wie kann ich diese Schwachstelle verhindern?
Kann man irgendwie sagen, dass die PDF http://www.cer-online.de/Facharbeit/Facharbeit.pdf nur geöffnet werden kann, wenn man bereits auf der Skript-Seite unter http://www.cer-online.de/Facharbeit/index.php war und andernfalls auf die Skript-Seite umleiten?

Man könnte natürlich über htaccess bzw. htpasswd den Zugriff auf die Datei sperren und nur über das Skript den Zugang ermöglichen.
Gibt es eine Möglichkeit bei gesperrten Zugriff auf die Index-Seite mit dem Skript umzuleiten?

Viele Grüße und vielen Dank
Florian
 
Hallo

Du könntest einfach in der .htaccess Datei eine Umleitung machen bzw. auch ein mod_rewrite für diesen Ordner oder die Datei setzen.

Grüße
SimonErich
 
Hallo SimonErich,

ich habe das Problem jetzt folgendermaßen versucht, an der Wurzel zu packen (.htaccess):
Code:
RewriteEngine on
Options FollowSymlinks
RewriteBase /Facharbeit/

RewriteCond %{HTTP_REFERER} !^http://cer-online.de
RewriteCond %{HTTP_REFERER} !^http://www.cer-online.de
RewriteRule ^Facharbeit.pdf /Facharbeit/ [redirect,last]

1. Bin ich mir bei der RewriteBase nicht ganz sicher!?
Sowohl die index.php, als auch die Facharbeit.pdf liegen im Unterverzeichnis /Facharbeit/ von cer-online.de, also dürfte das richtig sein, oder?

2. Ich meine es gab für die Wiederholung des Basisverzeichnisses bei der Zieladresse der Redirect-Umleitung eine Kurzanweisung "*\" o.ä., mit der ich mir das /Facharbeit/ dort sparen kann, oder!?

3. Aktuell scheint der Code zu funktionieren, wird nicht erst die Domain cer-online.de aufgerufen, kann die Facharbeit.pdf nicht direkt eingesehen werden, es wird auf das PHP-Skript (URL gekürzt auf /Facharbeit/ und dank Standardverzeichnis auf index.php) verlinkt.
Leider meldet mir der acrobat Reader, dass die Datei nicht mit "%PDF-" beginnt. Ich denke der Fehler hängt mit dem Inframe der Seite index.php zusammen, in der das PDF-Dokument ja auch gleichzeitig mit der index.php geladen wird ... dort herrscht also gewissermaßen ein Konflikt, ob auch dieser Aufruf des PDFs auf das Skript umgeleitet werden soll.

Da ich sowieso der Facharbeit ein etwas anspruchsvolleres Design widmen wollte, wird sich das Problem automatisch beheben, aber mich würde trotzdem interessieren, wie man das Problem vorerst lösen könnte!?

Viele Grüße und gute Nacht
Florian



PS:
Ok, ich habe gerade das Inframe aus der index.php herausgenommen, die Seite wird folglich ohne Probleme geladen.
Klickt man nun auf den Link zum PDF, dürfte man nicht umgeleitet werden, da man ja von einer Seite der Domain cer-online.de kommt.
Stattdessen bekommt man trotzdem den oben beschriebenen Fehler, die Datei würde nicht mit "%PDF-" beginnen, zu hören.
Es liegt also doch nicht am Inframe, wider Erwarten, woran dann?
 
Zuletzt bearbeitet:
Moin,

diese Lösung per htaccess ist dahingehend suboptimal, da man dem REFERER nicht vertrauen kann.

Die einfachste(und übliche) Vorgehensweise:

Du erstellst dir ein Skript, welches
1. Den Zähler inkrementiert
2. Das PDF per readfile() ausgibt(den PDF-Header nicht vergessen)

Das PDF selbst schützt du per .htaccess komplett vor jedem Zugriff, so kommt das oberhalb erwähnte Skript dort zwar heran(weil es übers Dateisystem zugreift)...aber alle, die über HTTP dort ran wollen, stehen vor verschlossenen Türen.
Oder du leitest gleich per .htaccess alle direkten Anfragen an das PDF auf das Skript mit dem Zähler um.
 
Zurück