Antispam-Maßnahmen für Mediawikis

Die Mediawikisoftware ist ein weit verbreitetes, wenn nicht gar das am häufigsten genutze Wiki außerhalb von Unternehmen. So ist es nicht verwunderlich, dass auch Mediawikis Ziel von Spammern sind.

Ein Wiki lebt allerdings von seinen Autoren und ich wage mal die Behauptung, dass die Mitarbeit jenseits von den Projekten der Wikipedia auf nur wenige Schultern verteilt ist. Das trifft auch auf das SELFHTML-Wiki zu. Um die Hürden für eine Mitarbeit so gering wie möglich zu setzen, gibt es bei uns etwa keinen Anmeldezwang, sodass jeder Inhalte verändern kann. Das nutzen manchmal pubertierende Jugendliche um irgendwelchen Unsinn beizutragen oder auch mal die eine oder andere Seite zu leeren, aber auch Spambots um Links zu Arzneimmitteln für ein erfolgreiches Liebesleben unterzubringen. Letzteres lässt sich ziemlich einfach in den Spam-Listen verhindern.

Solcherart Listen verwenden reguläre Ausdrücke. Grundkenntnisse sind hilfreich aber nicht unbedingt erforderlich. Sie können Ihre Ausdrücke unter regex101.com testen.

MediaWiki:Spam-blacklist und MediaWiki:Spam-whitelist

Je nach Spam-Aufkommen und Inhalt des Wikis, ist es wahrscheinlich sinnvoller, eine Whitelist als eine Blacklist zu pflegen.

 # Externe URLs, die in dieser Liste enthalten sind, 
 # blockieren das Speichern der Seite.
 # Syntax:
 #   * Alles ab dem „#“-Zeichen bis zum Ende der Zeile ist ein Kommentar
 #   * Jede nicht-leere Zeile ist ein regulärer Ausdruck, 
 #     der gegen die Host-Namen in den URLs geprüft wird.
 #<!-− Diese Zeile darf nicht verändert werden. −-> <pre>

 #</pre> <!−- Diese Zeile darf nicht verändert werden. −->

In die freie Zeile können Sie Ihre Filterregeln eintragen:

 # Blacklist
 #<!-− Diese Zeile darf nicht verändert werden. −-> <pre>
   . # Dieser Punkt sperrt alle externen Links.
 #</pre> <!−- Diese Zeile darf nicht verändert werden. −->

Tragen Sie in die Whitelist nun alle erlaubten Domains ein

 #<!-− Diese Zeile darf nicht verändert werden. −-> <pre>
 # Externe URLs, die in dieser Liste enthalten sind, 
 # blockieren das Speichern der Seite nicht, auch wenn sie
 # in der globalen oder lokalen schwarzen Liste enthalten sind.
   \.wikipedia\.org
 #</pre> <!−- Diese Zeile darf nicht verändert werden. −->

Jetzt sind alle externen Links, ausgenommen solche zu Wikipedia, verboten.

MediaWiki:Titleblacklist

In der letzten Zeit gab es eine Vielzahl von Neuanmeldungen durch Spambots. Wir verwenden nur ein sehr einfaches Captcha, da wir Menschen mit Einschränkungen nicht an der Mitarbeit hindern wollen. Offenbar waren einige Bots so klug, dieses zu umgehen. So wurden dann Seiten angelegt, deren Titel eine Telefonnummer im Verbund mit den Schlagwörtern „help“, „support“, o.ä. sowie eine große im Internet tätige Firma genannt. Der Inhalt dieser Seiten enthält keine externen Links, sodass die Maßnahmen mit der Spam-Blacklist ins Leere laufen. Dass das SELFHTML-Wiki nicht das einzige angegriffene Wiki war, zeigen die beinahe 3.000 Ergebnisse einer Google-Suche nach 1-800-919-0992.

Das Interessante für die Bot-Betreiber ist, dass die Mediawiki-Software auch nicht oder nicht mehr existierende Seiten ausliefern muss, etwa um das Erstellen oder den Blick in das Lösch-Logbuch zu ermöglichen. Deshalb bleiben einmal durch die Suchmaschinenrobots gefundene Links recht lange in den Suchergebnisseiten.

Abhilfe schafft das Erstellen einer schwarzen Liste für Seitentitel. Diese verhindert das Erstellen einer Inhalts-, Diskussions- oder Benutzerseite, falls die aufgeführten regulären Ausdrücke zutreffen. Die TitleBlacklist des SELFHTML-Wikis sieht für die betreffenden Maßnahmen wie folgt aus:

EDIT: Die aktuelle Variante befindet sich am Ende des Artikels.

 # telefon
 .*\d{3,}.*
 .*\d[0o]{2,}.*
 .*(support|phone|call|toll|help|service|number|customer|care|sale|line|dial).*
 .*(technical|quick|technicen|just|easy|repair).*

 # firmen u.ä.
 .*(facebook|twitter|microsoft|norto?n|mcafee|kodak|hp|epson|canon|dell|google).*
 .*(printer|camera|scanner|book|antiv|laptop|office).*
 .*(advisor|gmail).*
 .*(usa|canada|germany|europe).*

 # Abkürzungen, die es hoffentlich im Deutschen nicht so gibt
 .*(pls|hlp).*

 # billige tricks
 # c.a.l.l. m.e oder c-a-l-l m-e
 .*\..\..*
 .*-.-.*
 # .. -- ++ @@ !! und deren Kombinationen
 .*[\.\+-@!]{2,}.*

 # alle nicht-lateinischen Zeichen (jenseits von U+024F) 
 .*[^ -ɏ].*

Die führenden und abschließenden .* bedeuten „beliebig viele beliebige Zeichen“ und sind im Gegensatz zur Spamblacklist hier erforderlich, weil sich die Mechanismen der Prüfung offenbar unterscheiden.

Die ersten Zeilen möchte ich kurz erläutern:

.*\d{3,}.* verhindert, das Erstellen von Seiten, die mehr als 2 aufeinanderfolgende Ziffern enthalten; .*\d[0o]{2,}.* überprüft, ob die Ziffer Null durch den Buchstaben „o“ ersetzt wurde. Es wird hierbei nicht zwischen Groß- und Kleinschreibung unterschieden. Es sind also Seitennamen, die „8oo“, „80o“ oder „8o0“ enthalten, verboten. Zeile drei und vier enthalten nun Begriffe, welche nicht vorkommen dürfen. Diese Stelle kann ein wenig heikel sein, vor allem wenn es sich um ein englischsprachiges Wiki handelt.

Diese Liste mag für englischsprachige Wikis nicht geeignet sein, fußt sie doch dadrauf, dass englische Seitenbezeichnungen nicht zu erwarten sind. Sollte sie zu restriktiv sein, so kann sich ein Administrator einfach über sie hinwegsetzen und die Seite trotzdem erstellen.

Vielleicht hilft dieser Artikel dem einen oder anderen Wikibetreiber. Es war natürlich ein Prozess, wir mussten schauen, mit welchen Ideen die Spambots als nächstes aufwarteten. Bei uns ist das Spamaufkommen von ca. 100 bis 150 arbeitstäglich erstellten Spam-Seiten, bei etwa 70.000 Seitenzugriffen auf null zurückgegangen. Einigen Bots gelingt es zwar immer noch sich anzumelden, aber bei der Erstellung der Spamseiten scheitern sie dann.

Ergänzungen

Die Bots sind ziemlich schnell auf die Idee gekommen, neben der Null auch den Buchstaben i durch eine 1 zu ersetzen oder doppelte Buchstaben wegzulassen, also etwa „facebok“, „gogle“ oder „nortn“ zu verwenden.

 # telefon
 .*\d{3,}.*
 .*\d[0o]{2,}.*
 .*\d\b\d.*
 .*(supp(o|0)rt|ph(o|0)ne|call|t(o|0)ll|help|serv(i|1)ce|number|cust(o|0)mer|care|sale|l(i|1)ne|d(i|1)al|(o|0)ff?er).*
 .*(technical|qu(i|1)ck|technicen|just|easy|repa(i|1)r).*

 # firmen u.ä.
 .*(faceb(o|0){1,}k|tw(i|1)tt?er|m(i|1)cr(o|0)s(o|0)ft|n(o|0)rt(o|0)?n|mcafee|k(o|0)dak|hp|eps(o|0)n|can(o|0)n|dell|g(o|0){1,}gle).*
 .*(pr(i|1)nter|camera|scanner|b(o|0){1,}k|ant(i|1)v|lapt(o|0)p|(o|0)ff(i|1)ce).*
 .*(adv(i|1)s(o|0)r|gma(i|1)l).*
 .*(usa|canada|germany|europe).*

 # Abkürzungen, die es hoffentlich im Deutschen nicht so gibt
 .*\b(pls|hlp|tech?)\b.*

 # billige tricks
 # c.a.l.l. m.e oder c-a-l-l m-e
 .*\..\..*
 .*-.-.*
 # .. -- ++ @@ !!, Wortgrenzen und Kombinationen
 .*[\.\+-@!\b]{2,}.*

 # alle nicht-lateinischen Zeichen (jenseits von U+024F) 
 .*[^ -ɏ].*

Die hier vorgestellten Lösungen dürfen ohne weitere Namensnennung von Jedermann verwendet werden; SELFHTML übernimmt jedoch keinerlei Garantie für das wunschgemäße Funktionieren dieser Erweiterungen und kann auch nicht für auftretende Schäden oder sonstige Unannehmlichkeiten verantwortlich gemacht werden.