Apache2: Verlinkung externer Grafiken unterbinden

Just Matt

Just Matt

Eroberer
Hallo zusammen,

ich betreibe ein Board indem die Mitglieder gerne in ihren Beiträgen Bilder einbinden. Die Bilder werden i.d.R. bei Bild-Hoster hochgeladen und dann in meinem Board verlinkt.

Da Urheberrechtsverletzungen ein sehr heißes Eisen sind, möchte ich diese Möglichkeit gerne unterbinden. Auf Board-Ebene steht mir diese Funktion leider nicht zur Verfügung. Daher würde ich das ganze gerne auf Apache-Ebene ausschließen.

Auf Google finde ich tonnenweise Beiträge um Hotlinking von meiner Seite zu einer anderen Seite zu blocken. Bei mir soll's aber genau anders herum sein. Wenn ich <img> in den Beiträgen blocken würde, dann könnte keiner mehr die Smileys einbinden, die ich auf meinem Webspace abgelegt habe.

Was muss denn in der httpd stehen, damit sowas funktioniert?

Viele Grüße

Matthias
 
Abend,

ich wüßte nicht, wie man das mit dem httpd unterbinden könnte, da alle mir bekannten Funktionen der URL-Manipulation (rewrite / redirect) sich nur mit Anfragen befassen die an deinen Server gestellt werden.

mfg
HeadCrash
 
Vielleicht kannst du dir ein Skript basteln, dass neue Posts bzw die Datenbank auf externe URLs in IMG-Tags prüft und diese gegen ein Placeholder o.Ä. ersetzt.
 
Grade eben mal Tante Google mit "apache content filtering" als Suchbegriff bemüht, dabei unter anderem das hier gefunden Apache Content Filtering, denke das kann man entsprechend umbiegen.

mfg
HeadCrash
 
Also ich glaub mittlerweile auch, dass ich das auf Backend-Ebene lösen muss. Ich kann zwar die Datenbank-Einträge nach src="xyz" durchsuchen oder besser noch abfangen, aber das wird glaub ich ne ziemliche Übung. Ich habe relative und absolute Pfade. Sprich die Smileys in den Beiträgen, die ja bleiben sollen sind relativ und die etwaige Images die rausgefiltert werden sollen sind absolute. Na denn mal Prost Mahlzeit.

Meine erste Überlegung war das ganze schon bei Eingabe über den Editor (TinyMCE) abzufangen, allerdings gehts dort nur über Javascript und da kenne ich mich noch weniger aus. Dann werde ich mir mal das Skript reinziehen und dort eine Funktion zwischensetzen müssen, die den Beitrag vor dem Speichern entsprechend ändert.

oh hauerhauerha ...
 
nach src="http://*" absuchen, dann hast du alle absolute Pfade, am besten du bastelst das ganze in das Postscript rein, also jedes mal wenn jemand etwas postet wird der Text durchgescannt und src="http://*" durch einen link oder placeholder ersetzt.
 
Externe Images mit mod_ext_filter ausfiltern

Morgen,

der Weg das schon bei der Eingabe abzufangen und am besten gleich eine entsprechende Meldung auszugeben, ist wahrscheinlich der sauberste.

Habe mir jetzt trotzdem mal die Zeit genommen mit Apache mod_ext_filter zu experimentiern.

Auf der Doku-Seite wird allerdings davor gewarnt, dass mod_ext_filter nicht unbeding Performant ist.

Die auszuliefernde Seite:
Code:
atlantis:~# cat /srv/www/www.example.com/htdocs/apache-filter/index.html
<html>
<head>
<title>"snowman"</TITLE>
</head>

<body>
<img src="https://www.example.com/snowman/img01.jpg">
</body>

Quellcode aus dem Browser
Code:
<html>
<head>
<title>"snowman"</TITLE>
</head>

<body>
<img src="noExtenalPicsPlease.jpg">
</body>
</html>

Das große Voodoo der Apache Konfiguration :D

Das Modul ext_filter laden
Code:
atlantis:~# a2enmod ext_filter
Enabling module ext_filter.
Run '/etc/init.d/apache2 restart' to activate new configuration!
atlantis:~# /etc/init.d/apache2 restart
Restarting web server: apache2 ... waiting .
So und das ganze gangbar machen
Code:
ExtFilterDefine externalPics mode=output intype=text/html cmd="/bin/sed 's/<img src=\"http.*>/<img src=\"noExtenalPicsPlease.jpg\">/g'"

<Directory /srv/www/www.example.com/htdocs/apache-filter>
  SetOutputFilter externalPics
</Directory>

Umgesetzt habe ich das jetzt mit einem Debian Lenny, aber da das ein reguläres Modul für den Apachen ist, sollte das Distributionsübergreifend funktionieren.

mfg
HeadCrash

PS: alle Versuche den sed_Aufruf in eine eingen Datei auszugliedern scheiterten bei mir. Auszug aus dem Errorlog
Code:
[Sat Jan 08 11:47:16 2011] [error] [client a.b.c.d] (32)Broken pipe: apr_file_write(child input), len 0
[Sat Jan 08 11:47:16 2011] [error] [client a.b.c.d] (32)Broken pipe: ef_unified_filter() failed
 
Zurück
Oben