seeseekey.net - Invictus Deus Ex Machina

Vor einiger Zeit hatte ich einen Twitter-Bot entwickelt welcher als Datenquelle unter anderem die Wikipedia nutzt. Dazu nutzt der Bot unter anderem eine Bibliothek um auf die MediaWiki-API zuzugreifen. Nun stellte ich fest das die Nutzung der API in diesem Fall allerdings überdimensioniert war. Stattdessen ist es möglich sich für eine beliebige MediaWiki-Seite denn Quelltext anzeigen zu lassen. Die URL sieht dabei wie folgt aus:

https://de.wikipedia.org/wiki/Machinima?action=raw

Durch den Parameter action=raw wird der Quelltext anstatt des HTML-Renderings ausgegeben und kann somit ausgewertet werden.

Wenn man Artikel in einer MediaWiki löscht, so werden diese Artikel und deren Historie weiterhin vorgehalten. Problematisch wird dies wenn man z.B. eine größere Menge an Artikeln entfernt hat. So etwas kann unter anderem im Rahmen der Spam-Bekämpfung vorkommen. Im maintenance-Ordner der MediaWiki-Installation gibt es für solche Zwecke das Skript deleteArchivedRevisions.php. Wird dieses auf der Konsole ausgeführt:

php deleteArchivedRevisions.php --delete

wird die Datenbank um historische Einträge bereinigt. Die Historie von nicht gelöschten Artikeln wird dabei beibehalten, so das wirklich nur der unnötige Ballast entfernt wird.

Eine meiner MediaWikis welche ich betreibe wurde in den letzten Tagen zugespamt. So wurden mehrere zehntausend Seiten und Nutzer angelegt. Diese von Hand zu entfernen wäre ein sehr zeit- und nervenraubendes Unterfangen. Mit der Erweiterung BlockAndNuke, kann man diesen Vorgang beschleunigen.

BlockAndNuke listet die Spammer auf

BlockAndNuke listet die Spammer auf

Nach der Installation stellt die Erweiterung eine Spezialseite zur Verfügung. Dort sind die Nutzer aufgelistet, welche entfernt werden sollen. Bei der Entfernung werden auch die jeweiligen Beiträge des Nutzers entfernt. Problematisch wird das ganze bei mehreren tausend oder zehntausend Nutzern und Beiträgen. Dafür gibt es im Ordner BlockAndNuke die Kommandozeilenvariante mit dem Namen ban.php. Mittels:

php ban.php --hammer

kann der Vorgang auf der Kommandozeile ausgeführt werden. Dabei wird whitelist.txt Datei berücksichtigt in welcher sich die Nutzer befinden sollten welche nicht zu den Spammern zählen. Je nach Anzahl der löschenden Nutzer und Beiträge kann der Vorgang einige Zeit in Anspruch nehmen.

Beim Upload einer Datei in einer MediaWiki-Installation ist es möglich eine Lizenz anzugeben. Standardmäßig ist in der Liste der Lizenzen allerdings kein Eintrag zu finden.

Die Upload-Seite einer MediaWiki-Installation

Die Upload-Seite einer MediaWiki-Installation

Damit sich das ändert muss die Seite MediaWiki:Licenses (z.B. http://wiki.example.com/MediaWiki:Licenses) geändert werden. Die Definition sieht dabei wie folgt aus:

* Unfree licenses:
** IC|Image citation
* Free licenses:
** PD|PD: public domain
** CC-BY-SA|Creative Commons Attribution ShareAlike
** GFDL|GFDL: GNU Free Documentation License
** GPL|GPL: GNU General Public License
** LGPL|LGPL: GNU Lesser General Public License

In der Definition wird eine hierachische Struktur abgebildet. So handelt es sich bei Free licenses um die Kategorie zu welcher die folgenden Lizenzen gehören. Anschließend wird die Seite zur Lizenz und die Beschreibung der Lizenz getrennt durch eine Pipe definiert.

Mit der Erweiterung Piwik Integration gibt es eine aktiv entwickelte Möglichkeit Piwik in MediaWiki-Seiten zu integrieren. Um die Erweiterung in Betrieb zu nehmen muss der Quelltext auf GitHub bezogen werden. In der MediaWiki-Installation wird der Quelltext in den Ordner extenstions/Piwik/ kopiert. Anschließend muss die LocalSettings.php bearbeitet werden. Dort werden folgende Zeilen hinzugefügt:

#Piwik
require_once "$IP/extensions/Piwik/Piwik.php";
$wgPiwikURL = "piwik.example.com";
$wgPiwikIDSite = "3";

Die Werte $wgPiwikURL und $wgPiwikIDSite müssen dabei natürlich durch die korrekten Werte ausgetauscht werden. Bei der $wgPiwikURL muss darauf geachtet werden das kein Protokoll (HTTP/HTTPS) mit angegeben wird, da die Integration sonst fehlschlägt.

Unter Umständen kann es vorkommen, das die MediaWiki Software im Betrieb eine Ausnahme (Exception) wirft. Dann bekommt man eine Meldung nach dem Schema:

[6030c238] 2015-02-16 8:48:30: Fatal exception of type MWException

Diese Aussage ist natürlich zur Fehlerfindung nicht sehr aussagekräftig. Damit man eine ausführliche Ausgabe zur Exception bekommt, muss in der LocalSettings.php Datei folgende Option hinzugefügt werden:

$wgShowExceptionDetails=true;

Anschließend erhält man im Falle eine Exception einen sauberen Callstack, mit welchen man sich auf Fehlersuche begeben kann.

In einer Standard-MediaWiki-Installation sind als Dateitypen für den Upload die Endungen png, gif, jpeg und jpeg erlaubt. Möchte man diese Liste erweitern und andere Dateitypen hinzufügen muss der Wert $wgFileExtensions in der LocalSettings.php Datei neu definiert werden. Das könnte für das Hinzufügen von PDF-Dateien so aussehen:

$wgFileExtensions = array( 'png', 'gif', 'jpg', 'jpeg', 'pdf');

Die bereits bestehenden Typen sind in dieser Definition ebenfalls zu finden, damit sie auch weiterhin erlaubt sind.

Vor knapp zwei Jahren schrieb ich über die Authentifikation in MediaWiki über eine WordPress-Datenbank. Das Problem an dem Quellcode welcher dort vorgestellt wird, ist seine nicht mehr gegebene Aktualität. Mit den neuen Versionen der MediaWiki-Software funktioniert der Quelltext nicht mehr, da sich einige Innereien innerhalb der MediaWiki-Software geändert haben.

Die Anmeldung in einer MediaWiki

Die Anmeldung in einer MediaWiki

Ich habe mich dem Modul angenommen und das ganze an die aktuelle MediaWiki-Version angepasst. Zu finden ist der unter der GPL3 lizenzierte Quellcode dabei auf GitHub. Die Installation im MediaWiki ist dabei in der README-Datei beschrieben.

Wenn man sich die MediaWiki “user”-Tabelle anschaut, so wird man feststellen das die Nutzernamen mittlerweile als “varbinary” gespeichert werden. Im Gegensatz zur früheren Variante lassen sich die Namen damit nicht mehr im Klartext lesen.

Ein Auszug aus der "user"-Tabelle

Ein Auszug aus der “user”-Tabelle

Möchte man die Namen im Klartext anzeigen, so ist dies mit folgendem SQL Befehl möglich:

SELECT CAST(user_name AS CHAR) from user

Die Ausgabe besteht dabei aus allen Nutzernamen in ihrer Klartextform.

Vor einigen Stunden wurde die neue Version der MediaWiki Software freigegeben. In dem Release wurde die minimale benötigte PHP Version auf 5.3.2 angehoben. An Verbesserung sind die neue Diffanzeige, sowie Verbesserungen für Farbenblinde hinzugekommen. Des weiteren gibt es eine neue Spezialseite (“Special:MostInterwikis”) sowie das neue Schlüsselwort “{{PAGEID}}” welches die Seiten ID ermittelt. Neben den Verbesserungen sind auch einige neue Sprachen wie die Emilianische Sprache hinzugekommen. Die neue Version der MediaWiki kann unter http://www.mediawiki.org/wiki/MediaWiki/de bezogen werden.