Ergänzend zur Seite Wikipedia:Weblinks/Block ist dies eine Anleitung für die Bedienung der dort genannten verschiedenen Techniken zur Einschränkung unerwünschter externer Links.

Domain-Blocklist

Bearbeiten

Wenn eine komplette Domain ausnahmslos blockiert werden soll (was meistens der Fall ist), ist die Domain-Blocklist das richtige Werkzeug. Auf Special:BlockedExternalDomains einfach im ersten Feld die entsprechende Domain angeben und im zweiten Feld einen Kommentar, der mit dem aktuellen Zeitstempel beginnt und einen Link zur relevanten Diskussion enthält. Es wird empfohlen, das Script user:lustiger_seth/admin_stuff.js als Eingabe hilfe zu nutzen.

Alles, was im Abschnitt #Spam-Blacklist und Spam-Whitelist steht, gilt im Prinzip auch für die Domain-Blocklist, allerdings ohne das komplizierte Zeug mit den regulären Ausdrücken.

Spam-Blacklist und Spam-Whitelist

Bearbeiten

Hier geht es primär um

und sekundär um

Die weit weniger ausführliche engl. Original-Anleitung findet sich auf mw:Extension:SpamBlacklist#Usage.

Hier wird beschrieben, wie Eintragungen in die Blacklist oder die Whitelist vorgenommen werden und was dabei berücksichtigt werden muss.

Grundvoraussetzung

Bearbeiten

Neben den erforderlichen Schreibrechten, die man als Admin hat, ist eine Grundvoraussetzung für das Bearbeiten der Spam-Black- und -Whitelists das Basiswissen über reguläre Ausdrücke.
Wer diese Vorkenntnisse nicht hat, sollte nicht die Whitelist und unter keinen Umständen die Blacklist bearbeiten, sondern wie alle Nicht-Admins einen Antrag stellen, siehe Abschnitt #Wie funktioniert diese Seite?. Andernfalls könnten die Folgen sein, dass beispielsweise die Spam-Blacklist komplett ausgehebelt wird oder im schlimmsten Fall sogar ein Großteil der Wikipedia quasi-gesperrt wird; dazu würde es schon genügen, eine neue Zeile in die Spam-Blacklist einzufügen, die lediglich aus einem Punkt (.) besteht.

Im Rest dieser Dokumentation wird also vorausgesetzt, dass man über Basiswissen bzgl. regulärer Ausdrücke verfügt, wie es z. B. in Selfhtml[1] zu finden war. Detaillierter sind beispielsweise die engl. Manuals von Perl[2] oder PHP[3].

Prinzipielles Vorgehen

Bearbeiten

Sperren (Blacklist)

Bearbeiten

Die Blacklist, die Whitelist und deren gemeinsames Log (Wikipedia:Spam-blacklist/log) sind separiert, d. h. das Log muss manuell ergänzt werden, nachdem ein Eintrag in die Blacklist bzw. die Whitelist erfolgt ist. Damit ergibt sich das folgende prinzipielle Vorgehen, falls eine neue Adresse per Blacklist gesperrt werden soll:

  1. Wird die Domain oder Teile davon bereits gesperrt? Falls ja, muss i. d. R. kein neuer Eintrag erfolgen, sondern der alte kann abgeändert werden. Nach bisherigen Sperrungen für einen vorgegebenen URL kann mit dem Tool searchsbl gesucht werden.
  2. Ist sichergestellt, dass dadurch nicht zuviel blockiert wird? Dazu muss einerseits die Syntax des regulären Ausdrucks gut durchdacht sein (siehe Abschnitt #Syntax) und andererseits via Special:Linksearch eruiert werden, wo die zu sperrende Adresse überall vorkommt. Dabei kann sich z. B. herausstellen, dass einige Links der Wikipedia nützlich sind, weswegen man den regulären Ausdruck überarbeiten muss.
  3. Da Archiv-Bots wie SpBot keine Diskussionen archivieren können, die gesperrte Links enthalten, müssen jene Links manuell oder via anderem Bot (z.B. CamelBot) entschärft werden, z.B. durch <nowiki></nowiki>. In Artikeln dagegen sollten auf der Blacklist stehende Links weder entschärft noch gelöscht werden, wenn sie WP:WEB genügen.
  4. Falls bereits auf MediaWiki_Diskussion:Spam-blacklist über die Adresse gesprochen wurde, sollte dort über die Sperrung informiert werden.
  5. Auf Wikipedia:Spam-blacklist/log sollte gemäß der dortigen Anleitung die Änderungen an der Blacklist zusätzlich ins Log eingetragen werden. Wer die dortige Vorgehensweise als zu kompliziert empfindet, der kann den Eintrag auch jemand anderem überlassen. In diesem Fall jedoch, ist es wichtig, dass auf Wikipedia:Weblinks/Block/Anfragen (oder der zur Domain eigens angelegten Seite) bei den Anträgen die Gründe für das Sperren genannt werden. Wenn dann jemand anderes den Eintrag im Log vornimmt, kann diese Diskussion im Log verlinkt werden.

Blockaden, für die keine Begründung angegeben wird, dürfen jederzeit gelöscht werden.

Entsperren (Entfernen von Blacklist)

Bearbeiten

Das Entfernen eines Eintrags der lokalen Blacklist ist deutlich leichter:

  1. Falls bereits auf WP:Weblinks/Block/example.org (mit entsprechender Domain statt "example.org") über die Adresse gesprochen wurde, sollte dort über die Entsperrung informiert werden.
  2. Eintrag aus der Blacklist entfernen,
  3. Eintrag auf Wikipedia:Spam-blacklist/log machen, dabei auf Diskussion verlinken, in der der Grund fürs Entsperren angegeben ist.

Entsperren (Whitelist)

Bearbeiten

Auch das Entsperren (per Whitelist) macht weniger Arbeit:

  1. Wird die Domain oder Teile davon bereits entsperrt? Falls ja, muss i. d. R. kein neuer Eintrag erfolgen, sondern der alte kann abgeändert werden.
  2. Falls bereits auf WP:Weblinks/Block/example.org (mit entsprechender Domain statt "example.org") über die Adresse gesprochen wurde, sollte dort über die Entsperrung informiert werden.
  3. Auf Wikipedia:Spam-blacklist/log sollte gemäß der dortigen Anleitung die Änderungen an der Whitelist zusätzlich ins Log eingetragen werden. Wer die dortige Vorgehensweise als zu kompliziert empfindet, der kann den Eintrag auch jemand anderem überlassen. In diesem Fall jedoch, ist es wichtig, dass auf WP:Weblinks/Block/example.org bei den Requests die Gründe für das Entsperren genannt werden. Wenn dann jemand anderes den Eintrag im Log vornimmt, kann diese Diskussion verlinkt werden.

Die Syntax der Blacklist ist mit der Syntax der Whitelist identisch. "Liste" bezieht sich im Folgenden deshalb stets auf beide Listen.

In der Liste wird pro Zeile alles, was hinter "#" steht, als Kommentar angesehen und somit vom Spam-Block-Script ignoriert. Whitespace (Leerzeichen, Tabulatoren, Zeilenumbrüche) am Anfang und Ende des übrig bleibenden Strings wird ebenfalls ignoriert.[anm 1] Alles andere wird jeweils als regulärer Ausdruck interpretiert, der auf URLs angewendet wird. Beispiel:

# Die gesamte Zeile wird als Kommentar angesehen, also ignoriert 
\.example\.net # Ab der Raute (genauer: ab dem Leerzeichen vor der Raute) ist dies wieder ein Kommentar

Die von etwaigen Kommentaren befreiten Zeilen werden vom Spam-Block-Script alle eingelesen und auf folgende Weise zu einem großen regulären Ausdruck verwurschtelt. Zunächst werden automatisch alle Schrägstriche maskiert, d.h. Schrägstriche brauchen nicht manuell maskiert zu werden, sondern sie werden hier standardmäßig literal (also nicht als Meta-Zeichen oder Delimiter, sondern eben einfach als Schrägstriche an sich) interpretiert.[anm 2] Anschließend werden die Zeilen mit ODER "|" verknüpft und schließlich zum Ausdruck

/https?:\/\/[a-z0-9.-]*(zeile 1|zeile 2|zeile 3|...|letzte zeile)/Si

vervollständigt. Es wird also nach "http://" und "https://" gesucht, gefolgt von einem Host und ggf. Pfad, der zu einem der regulären Ausdrücke aus der Liste passt ("pattern match"). Das Protokoll "http://" darf deshalb nicht manuell in die Liste eingetragen werden, und Subdomains brauchen nicht explizit angegeben zu werden, es sei denn, es soll nur eine bestimmte Subdomain ent- bzw. gesperrt werden. Der php-eigene S-Modifier[4] soll bloß eine Geschwindigkeitssteigerung bewirken; der i-Modifier bezweckt Case insensitivity, sodass also standardmäßig Groß-/Kleinschreibung von URL-Bestandteilen nicht unterschieden wird.

Der fertige reguläre Ausdruck wird schließlich auf eine Zeilenumbruch-separierte Liste aller externen Links des von einem Anwender jeweils bearbeiteten Artikel (oder Diskussion) losgelassen. Aus diesem Grund darf der Anchor ^ für den Beginn der Zeichenkette nicht eingesetzt werden.[anm 3]

Die Whitelist hat immer Vorrang vor der Blacklist:
Zuerst werden alle URLs um die Bestandteile gekürzt, die auf der Whitelist enthalten sind, anschließend werden die verbleibenden URLs und die verbleibenden URL-Reste(!) mit der Blacklist abgeglichen. Genaueres dazu kann in der Diskussion [2] nachgelesen werden.

Zusammengefasst
  • Kommentare mit # einleiten,
  • Schrägstriche nicht maskieren,
  • kein "http://" angeben,
  • Subdomain kann weggelassen werden,
  • Groß-/Kleinschreibung egal,
  • ^ als Anchor nicht verwenden.

Beispiele

Bearbeiten

Anhand einiger Beispiele wird nun die Syntax demonstriert. Es wird dabei zwar stets Bezug auf die Blacklist genommen, für die Whitelist läuft es aber prinzipiell genauso ab, mit dem Unterschied, dass eben nicht ge-, sondern entsperrt wird.

Gesamte Domain sperren

Bearbeiten

Soll die Website http://www.example.net (und https://www.example.net) samt allen Unterseiten und samt allen Variationen der Subdomains (also z. B. de.example.net etc.) gesperrt werden, so ist dies durch den Eintrag

\.example\.net

zu bewerkstelligen. Die Punkte müssen maskiert werden, damit sie literal und nicht als beliebiges Zeichen interpretiert werden. Hierbei wird allerdings wegen des ersten Punktes z. B. noch nicht die Adresse http://example.net gesperrt. Wird aber der erste Punkt weggelassen, also

example\.net

dann werden zusätzlich auch Domains der Art "nichtexample.net" gesperrt, was man meist nicht möchte. Einen Ausweg bietet hier ein Konstrukt mit dem einprägsamen, wunderschönen Namen "zero-width positive look-behind assertions" (wer nicht weiß, was das ist, es aber anwenden möchte, sollte es sehr gut in den beiden oben genannten englischen Anleitungen[2][3] nachlesen), auf das auch im nächsten kleinen Abschnitt noch mal eingegangen wird. Der Ausdruck damit sähe dann folgendermaßen aus:

(?<=\.|://)example\.net

Damit wird verlangt, dass direkt vor dem Bestandteil "example.net" entweder ein Punkt (\.) oder ein Protokoll (://) steht; in anderen Worten: Damit wird tatsächlich eine gesamte Domain inklusive aller möglichen Subdomains gesperrt, ohne dass etwaige unbeteiligte Domains blockiert werden.[anm 4]

Nur bestimmte Subdomain sperren

Bearbeiten

Soll die Website http://www.example.net (und https://www.example.net) samt allen Unterseiten gesperrt werden, aber keine Variationen der Subdomain, so ist dies durch den Eintrag

www\.example\.net

einigermaßen zu bewerkstelligen. Damit sind dann z. B. "de.example.net" und "en.example.net" erlaubt. Zwar werden mit dem Ausdruck nun Domains der Art "irgendwaswww.example.net" gesperrt, das sollte jedoch in den meisten Fällen keine Probleme bereiten. Falls doch, kann man sich entweder über die Whitelist behelfen oder aber schon wieder mittels einer zero-width look-behind assertion (siehe voriger Abschnitt); entweder positiv

(?<=://)www\.example\.net

oder negativ

(?<!ausnahme_1|ausnahme_2|...|ausnahme_n)www\.example\.net

Im ersten, positiven Fall wird verlangt, dass bei zu sperrenden URLs direkt vor dem "www" die Zeichenfolge "://" steht. Im zweiten, negativen Fall wird dagegen postuliert, dass vor dem "www" keiner der Zeichenketten "ausnahme_1", "ausnahme_2", ... oder "ausnahme_n" stehen darf, ansonsten paßt das Muster nicht (kein "pattern matching"), also auch nicht blockiert.

Unterseiten

Bearbeiten

Soll die Website http://www.example.net/boese_unterseite (und https://www.example.net/boese_unterseite) samt allen Unterseiten gesperrt werden, so kann dies durch den Eintrag

www\.example\.net/boese_unterseite

bewerkstelligt werden. Der Schrägstrich braucht hier wohlgemerkt nicht maskiert zu werden. Damit werden zwar potenziell auch (andere) Unterseiten gesperrt, die genauso beginnen, also z. B. www.example.net/boese_unterseite_ist_gar_boese, aber das nimmt man meist in Kauf. Ansonsten kann man sich wieder der lustigen Zauberdinger, ja genau, der zero-width negative look-ahead assertions, bedienen:

www\.example\.net/boese_unterseite(?![^/])

Die doppelte Negation ist hier beabsichtigt.

Ambivalente Websites

Bearbeiten

Gelegentlich kommt es vor, dass domains sowohl gute als auch besonders schlechte Unterseiten beherbergen. In diesem Fall gibt es unterschiedliche Vorgehensweisen. Wenn beispielsweise die Website nur wenige schlechte Seiten enthält, so kann man diese explizit aufführen, z. B.

example\.net/pfad1/boese_seite1\.htm
example\.net/anderer_komplett_boeser_pfad(?![^/])
example\.net/pfad3/boese_seite3\.php

oder kombiniert

example\.net/(?:pfad1/boese_seite1\.htm|anderer_ganz_boeser_pfad(?![^/])|/pfad3/boese_seite3\.php)

Falls umgekehrt eine Website nur aus wenigen guten und überwiegend bösen Seiten besteht, so kann einfach die gesamte Domain gesperrt und die wenigen Ausnahmen auf der Whitelist eingetragen werden.

Es gibt jedoch auch Websites, die viele gute und viele böse Seiten enthalten. Wenn man die bösen (alternativ die guten) anhand bestimmter Muster erkennen kann, also anhand von häufig vorhandenen Bestandteilen, dann lässt sich eine gezielte Sperre recht leicht umsetzen, z. B.

example\.net/.*(?:boese|schlimm|uebel)

Speed-up und Tricks

Bearbeiten

Sooo wichtig ist es vermutlich nicht, aber auf die Laufzeit zu achten, sollte auf jeden Fall nicht schaden. Was gibt es da zu beachten? Nun, zum einen sind non-capturing patterns (der unbedarfte aber geneigte Leser darf wieder im Perl-Manual[2] nachschlagen) meist schneller als capturing patterns, das heißt, es ist besser, (?:foo|bar) statt (foo|bar) zu schreiben. Außerdem sind die Quantoren + und * möglichst spärlich einzusetzen. Werden mehrere ähnliche URLs gesperrt, bietet es sich meist an, diese nicht in separaten, sondern durch Gruppierung in möglichst wenigen regulären Ausdrücken auszudrücken. :-)
Statt der Einträge

example\.net
example\.org
example\.com

sollte besser der Eintrag

example\.(?:com|net|org)

erfolgen, was von der RegExp-Engine deutlich schneller abgearbeitet werden kann.

Die verwendete Engine ist übrigens die von PHP (PCRE), d. h., es ist alles an regulären Ausdrücken erlaubt, was in PHP z. B. in preg_match erlaubt ist.

Für umfangreiche Recherchen, welche Links wie oft von welchen Anwendern wikpedia-weltweit gesetzt wurden, bietet m:SWMT/IRC einige Tools.

Außerhalb der deutschsprachigen Wikipedia

Bearbeiten

Info zur Meta-Vandalismusbekämfung gibt's auf m:Countervandalism Network.

Bearbeitungsfilter

Bearbeiten

Dazu ist alles Wichtige unter WP:FILT zu finden.

Grundvoraussetzung

Bearbeiten

Rudimentäres Verständnis von Programmiersprachen ist notwendig.
Wer dieses nicht hat, sollte nicht Regeln des Bearbeitungsfilters bearbeiten, sondern wie alle Nicht-Admins einen Antrag stellen, siehe Wikipedia:Weblinks/Block.

Referenzen

Bearbeiten
  1. Selfhtml – Perl: reguläre Ausdrücke
  2. a b c perldoc perlre
  3. a b php.net
  4. Näheres über die Modifiers liefert das PHP-Manual [1].

Anmerkungen

Bearbeiten

Diese technischen Anmerkungen sind nur für jene gedacht, die sich intensiver oder hintergründiger mit der Sache auseinandersetzen möchten. Fürs reine Benutzen der Black- und WhiteLists sind die Anmerkungen nicht notwendig.

  1. Siehe Source Code, function stripLines: trim(preg_replace('/#.*$/', '', $line));
  2. Es erfolgt genauer sogar Folgendes (automatisch): s~\\*/~\\/~g (Perl-Syntax)
  3. nach bug 21387 wurde in revision 60869 (2010-01-09) das zeilenende-zeichen $ nutzbar gemacht, da seitdem der m-modifier standardmaessig gesetzt wird.
  4. \b wird häufig in anderen Wiki-Blacklists verwendet, bringt aber nicht so viel, wie man vermuten könnte, weil z. B. das Minuszeichen in Domains vorkommen darf.