{"id":638,"date":"2010-05-13T16:54:55","date_gmt":"2010-05-13T14:54:55","guid":{"rendered":"http:\/\/blog.benny-baumann.de\/?p=638"},"modified":"2010-09-25T20:51:27","modified_gmt":"2010-09-25T18:51:27","slug":"vandalismus-bekmpfung-auf-die-etwas-andere-art","status":"publish","type":"post","link":"https:\/\/blog.benny-baumann.de\/?p=638","title":{"rendered":"Vandalismus-Bek\u00e4mpfung auf die etwas andere Art"},"content":{"rendered":"<p>Ich erhielt vorhin den Hinweis, dass da wohl irgendwas in einem meiner Wikis nicht stimmt. Also kurz nachgeschaut, festgestellt, dass da ein Botnet sich verewigt hatte und dementsprechend geschaut, die \u00c4nderungen wieder zu entfernen. Da das betroffene Wiki allerdings l\u00e4nger schon nicht mehr aktiv war und im betroffenen Zeitraum keine legitime Edits zu vermuten waren, konnte ich mir die Arbeit etwas vereinfachen.<!--more--><\/p>\n<p>Denn MediaWiki bietet schon seit geraumer Zeit die M\u00f6glichkeit, das gesamte Wiki als ein gro\u00dfes XML-File zu exportieren. Also habe ich dies auf dem Server kurzerhand mittels<\/p>\n<pre lang=\"bash\">php dumpBackup.php --full --logs>~\/wikibackup.xml<\/pre>\n<p>erledigt und erhielt f\u00fcr mein Wiki eine etwa 2MB gro\u00dfe Datei. Da das Durchsuchen per Hand etwas langwierig geworden w\u00e4re, ich aber relativ genau einen Zeitraum eingrenzen konnte, war die Frage der Herangehensweise durchaus spannend. Brauchbare XML-Editoren lie\u00dfen sich auf die Schnelle nicht finden (zumindest, die sowohl XPath konnten, dieses auch zum Arbeiten auf Knotenmengen unterst\u00fctzen und sofort auffindbar waren) und so fiel dann doch der Blick auf das Mittel der Wahl: regul\u00e4re Ausdr\u00fccke.<\/p>\n<p>Dementsprechend die Datei in meinen Regexp-Editor der Wahl geschmissen, kurz<\/p>\n<pre lang=\"text\" escaped=\"true\">^\\s+&lt;revision&gt;(?:(?!&lt;\\\/revision&gt;).)*?&lt;timestamp&gt;2010-05-.*?&lt;\\\/timestamp&gt;.*?&lt;\\\/revision&gt;<\/pre>\n<p>ins Eingabefenster gehackt, jegliche Fundstellen ins Nirvana verschoben und hatte prompt eine um 50 KB k\u00fcrzere Datei, in der das gesamte Wiki ohne Vandalismus abrufbar war.<\/p>\n<p>Diese brauchte nun lediglich noch mit<\/p>\n<pre lang=\"bash\">cat ~\/wikibackup.clean.xml |php .\/importDump.php<\/pre>\n<p>zur\u00fcck in etwas f\u00fcr MediaWiki Verarbeitbares transformiert werden und die Arbeit war erledigt.<\/p>\n<p>Bei Gelegenheit wiederhole ich diesen Schritt vielleicht sogar noch einmal, um die Umlaute im Wiki zu beheben. Die stimmten aber eh bereits schon seit einem Update letztens nicht mehr, d\u00fcrften aber durchaus die 5 Minuten Arbeit wert sein.<\/p>\n<p><strong>Update<\/strong>: Da der Importer von Mediawiki sich weigert, bestehende Seiten zu resetten und es daf\u00fcr auch keine direkte M\u00f6glichkeit gibt, muss man einen kurzen Umweg gehen und in der pages-Tabelle die zu resettenden Seiten l\u00f6schen und anschlie\u00dfend mit Hilfe der Maintainance-Scripte eine Reihe von Cleanup-Aufgaben ansto\u00dfen:<\/p>\n<pre lang=\"bash\">php .\/deleteOrphanedRevisions.php\r\nphp .\/rebuildall.php<\/pre>\n<p>Anschlie\u00dfend kann der Import-Vorgang wie gew\u00fcnscht erfolgen.<\/p>\n<p class=\"wp-flattr-button\"><a href=\"https:\/\/blog.benny-baumann.de\/?flattrss_redirect&amp;id=638&amp;md5=4f6494af7cbeb65b80251f0b8904d713\" title=\"Flattr\" target=\"_blank\"><img src=\"http:\/\/blog.benny-baumann.de\/wp-content\/plugins\/flattr\/img\/flattr-badge-large.png\" srcset=\"http:\/\/blog.benny-baumann.de\/wp-content\/plugins\/flattr\/img\/flattr-badge-large.png\" alt=\"Flattr this!\"\/><\/a><\/p>","protected":false},"excerpt":{"rendered":"<p>Ich erhielt vorhin den Hinweis, dass da wohl irgendwas in einem meiner Wikis nicht stimmt. Also kurz nachgeschaut, festgestellt, dass da ein Botnet sich verewigt hatte und dementsprechend geschaut, die \u00c4nderungen wieder zu entfernen. Da das betroffene Wiki allerdings l\u00e4nger schon nicht mehr aktiv war und im betroffenen Zeitraum keine legitime Edits zu vermuten waren, [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"ngg_post_thumbnail":0,"footnotes":""},"categories":[29],"tags":[69,276,21,346],"class_list":["post-638","post","type-post","status-publish","format-standard","hentry","category-software","tag-internet","tag-mediawiki","tag-php","tag-server"],"_links":{"self":[{"href":"https:\/\/blog.benny-baumann.de\/index.php?rest_route=\/wp\/v2\/posts\/638","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.benny-baumann.de\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.benny-baumann.de\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.benny-baumann.de\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.benny-baumann.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=638"}],"version-history":[{"count":7,"href":"https:\/\/blog.benny-baumann.de\/index.php?rest_route=\/wp\/v2\/posts\/638\/revisions"}],"predecessor-version":[{"id":641,"href":"https:\/\/blog.benny-baumann.de\/index.php?rest_route=\/wp\/v2\/posts\/638\/revisions\/641"}],"wp:attachment":[{"href":"https:\/\/blog.benny-baumann.de\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=638"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.benny-baumann.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=638"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.benny-baumann.de\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=638"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}