Hotlinking verhindern für Dateien > 5 MB?

  • Thread starter Thread starter Flow
  • Start date Start date
F

Flow

Guest
Es geht um Folgendes: Auf meiner Seite liegen in einem Ordner "Dateien" diverse Files mit diversen Filegrössen. Teilweise werden diese erlaubterweise von fremden Seiten direk verlinkt.

Für Dateien unter 5 MB soll dies auch weiterhin möglich sein. Neu soll aber bei grösseren Dateien diese Möglichkeit verhindert werden.


Nun wollte ich fragen, ob man dies irgendwie per Apache/.htaccess lösen kann. Apache sollte folgendes tun:

- Ein File wird von extern aufgerufen
- Er prüft, wie gross dieses ist
- Ist es < 5 MB, lässt er das Hotlinking zu
- Ist es > 5 MB, lässt er es nicht zu

Wichtig dabei ist der folgende Schritt:

- Er gibt NICHT einfach eine Standard- "Hotlinking verboten"- Seite aus
- Stattdessen gibt er eine Fehlermeldung aus, baut in diese Seite aber automatisch einen Link ein, mithilfe dessen der Besucher das File doch noch laden kann, nachdem er gemerkt hat, dass es zu meiner Seite gehört.


Ziemlich hohe Anforderungen, denk ich mal... LKann man dieses Verhalten irgendwie Apache beibringen, oder muss man da einen anderen Weg gehen (welchen)?
 
Eigentlich ganz einfach.

rewrite
.htaccess
Code:
RewriteEngine on
RewriteRule ^(.*)\.jpg /skript.php?%{REQUEST_FILENAME}

skript.php
Code:
<?php
$file = $_SERVER['QUERY_STRING'];
$size=filesize($file);
$maxgroesse=1024*1024*5;
$pic=imagecreatefromjpeg($file);
if($size===false){
header('Content-type: text/html');
echo'Bild nicht vorhanden';
}
elseif($size>=$maxgroesse){
header('Content-type: text/html');
echo'File zu gross';
// ok hier faellt mir nun spontan nicht ein, wie du an einen Link kommst,
// mit dem man das Bild dann doch runterladen kann. Es muesste was 
// dynamisches sein. Bei einem statischen Link, koennte man sonst
// diesen fuers Hotlinking benutzen.
}
else {
header('Content-type: image/jpeg');
imagejpeg($pic,'',75);
imagedestroy($pic);
}
?>

So koenntest du uebrigens auch ein Wasserzeichen in deine Bilder einbauen.
 
Last edited by a moderator:
Danke schon mal für die Antwort. Sorry, falls ich mich irre, aber die Lösung funktioniert nicht für andere Daten als Bilder, oder?

Ich verstehe kaum was von .htaccess oder PHP, aber für mich sieht die Lösung so aus, als ob sie

a) In dieser Form nur für .jpg files gilt

b) Nicht funktionieren würde, wenn man statt ".jpg" in der .htaccess ".*" schreiben würde, da die die Bilder durch das PHP- Script "durchlaufen", was mit normalen Dateien (etwa .zip) nicht gehen würde.


Sehe ich das richtig?
 
Man koennte alle zu pruefenden Endungen hintereinander angeben.
Code:
RewriteEngine on
RewriteRule ^(.*)\.(jpe?g|gif|png)$ /skript.php?%{REQUEST_FILENAME}
RewriteRule ^(.*)\.(zip)$ /anderes_skript.php?%{REQUEST_FILENAME}
Nun werden auch jpg, jpeg, gif und png Endungen beruecksichtigt.

Viel weiterhelfen kann ich dir da auch nicht. Mit dem Thema habe ich mich nicht so sehr auseinandergesetzt (weil ich es nicht brauchte :) )
 
Back
Top