Logo: Proxomitron - Ein Universeller Webfilter

Blockfiles / Listen

Die Bezeichnung "Blockfiles" ist eigentlich zu ungenau. Blockfiles sind Listendateien, die in Filter eingebunden werden können.

Es handelt sich dabei nicht um ein Äquivalent zu den Include-Dateien vieler Programmiersprachen! Eingebundene Listen werden nicht als Teil des Filterausdruckes, sondern als eigenständiger Unterausdruck behandelt. Jede Zeile einer Liste ist dabei ebenfalls ein eigenständiger Ausdruck.

Wenn Proxomitron beim Abarbeiten eines Filters auf einen Befehl zum Einbinden einer Liste stößt, dann unterbricht er an dieser Stelle und arbeitet zeilenweise die Ausdrücke in der Liste ab. Wenn eine Zeile aus der Liste wahr wird, dann betrachtet Proxomitron den Teilausdruck in dem der Aufruf stattfand als wahr. Wird keine Zeile der Liste wahr, dann gilt der Teilausdruck als unwahr. Danach wird die Abarbeitung des Filters fortgesetzt.

Die meisten Listen enthalten URLs und URL-Teile, die bestimmten Filtern sagen, was sie filtern bzw. nicht filtern sollen. Es gibt aber auch Filter, bei denen ein Großteil der Filterlogik in den Listen steckt.

Listen einbinden

Um eine Liste in einen Filter einzubinden, braucht man die Funktion $LST(<Listenname>).
Sie kann in den Feldern "URL-Entsprechung", "Eingrenzende Entsprechung", "Vergleichsausdruck" und – sehr eingeschränkt – auch im Ersetzungsausdruck eingesetzt werden. Es ist sogar möglich, Listen aus Listen heraus aufzurufen.

Im folgenden Beispiel wird die Listendatei "NoImages" als URL-Entsprechung benutzt. Der Filter wird dadurch nur bei den Seiten aktiv, die in der Liste aufgeführt sind.

Seitenfilter
URL-Entsprechung: $LST(NoImages)
eingrenzende Entsprechung: <i(mg|mage|nput)*>
Vergleichsausdruck: \1src=[^ >]+\2
Ersetzungsausdruck: \1 border=1 src="\dhtml/killed.gif" \2

Im zweiten Beispiel – einem Header-Filter – wird als URL-Entsprechung auch eine Liste eingesetzt. Diesmal ist der Ausdruck allerdings negiert. Das bedeutet, der Filter wird bei den Seiten aktiv, die nicht in der Liste stehen.

Headerfilter
HTTP-Header: Cookie: Kill a cookie (out)
URL-Entsprechung: (^$LST(CookieList))
Header-Wert suchen: *
Ersetzungsausdruck:

Der Aufbau von Listen

mehrzeilige Ausdrücke

Wie schon erwähnt, gilt in einer Liste jede Zeile als eigenständiger Ausdruck bzw. als eigenständige Variante, die von Proxomitron durchprobiert wird. Wenn aus Gründen der Übersichtlichkeit ein Ausdruck umgebrochen werden soll, dann müssen die zusätzlichen Zeilen mit mindestens einem Leerzeichen am Anfang eingerückt werden. Leerzeilen sind innerhalb eines auf diese Art umgebrochenen Listeneintrags nicht erlaubt.

Beispiel:
*width="100" & (
   *height="200"|
   *height="400"|
   *height="624"
   )

Kommentare

Kommentarzeilen werden durch ein "#" am Anfang gekennzeichnet.

Beispiel:
# Kommentar
Ausdruck
# noch ein Kommentar
weitere Ausdrücke

zusätzliche Ausschlussbedingungen

Normalerweise führt ein beliebiger wahrer Ausdruck in einer Liste dazu, dass Proxomitron die Liste als wahr betrachtet und zum Filter zurückkehrt. In bestimmten Situationen kann es aber hilfreich sein, zu einem allgemeiner formulierten Listeneintrag eine oder mehrere Ausschlussbedingungen zu formulieren, die – wenn sie ebenfalls wahr werden – das positive Ergebnis aufheben.

Beispiel:
# Bypass für lokale Filterskripten
local.ptron/

# Kein Bypass für lokale Dateien, die von Filtern verändert werden sollen
~local.ptron/ProxJSConf.js
~local.ptron/ProxCSSConf.css
~local.ptron/killed-pro.html

Sobald Proxomitron in einer Liste einen wahren Ausdruck gefunden hat, sucht er den Rest der Liste nach Ausschlussbedingungen ab. Wenn eine Ausschlussbedingung gefunden wird und diese sich ebenfalls als wahr herausstellt, dann wird das Zwischenergebnis auf "unwahr" zurückgesetzt.

Tipps

Der Aufbau einer Liste kann sich entscheidend auf die spätere Arbeitsgeschwindigkeit auswirken.

Einerseits bestimmt der Aufbau von Filter und Liste, wie oft eine Liste pro Filterdurchlauf abgearbeitet werden muss. Andererseits beeinflusst der Aufbau einer Liste die Anwendbarkeit und Effizienz der Optimierungsfunktionen.

Proxomitron besitzt mehrere Hash- und Optimierungsalgorithmen, die er je nach Aufbau der Listeneinträge anwenden kann. Es ist deshalb in vielen Fällen effizienter, eine lange Liste mit einfachen (Stichwort-)Einträgen zu benutzen, als eine kürzere Liste mit entsprechend komplexeren Ausdrücken.

© Michael Bürschgens <website@proxomitron.de>