[Mediawiki] phpMyAdminでバックアップを取る


大量のスパムアカウントの削除についてあれこれ悩んでいる際に、ふと「これバックアップさえ取ってあれば、スパム登録されまくる前の状態に復元すればよかっただけじゃないのか・・・?」と思い、絶望的な気分に。

設置した時から全くバックアップを取っていなかったのが今になって悔やまれる・・・。

今からでもいい、バックアップを取ろう!そしてあわよくばスパムに狙われる前のデータに戻してしまおう!と思ったので、バックアップ方法を探ってみた。

SSHが使えればMYSQLに付属しているというmysqldumpというツールを使うこともできるようなんだけど、残念ながら安いサーバーを使っているのでSSH接続ができず、サーバの管理画面に用意されているphpMyAdminを使うことに。

こちらのサイトで詳しく手順を書いて下さっていたので、参考にしたらすぐできました。
WikiCookRecipe日記 – バックアップのテスト

ただし、記事数は150程度しかないのに、ダウンロードした.sqlのファイルサイズはなんと圧巻の1.9GB。恐ろしい・・・テキストデータしかないのに何故こんなデカいサイズに?!

また、「記事を一部だけ選んで復元」はかなり難しいだろうなぁという考えから、csvやxml形式でもphpMyAdminでバックアップを取ってみました。
(150ぐらいの記事なら手動で再登録という苦行もやり遂げられるだろうという安易な考え)

・・・結果、どちらもやはり1GBを超えた。

あまりのデカさにExcelには「一部しか開けませんでしたー」と言われ、文字化けしまくりで全く読めないデータを見せつけられてしまった。
全幅の信頼を置くTeraPadに至っては、「開く」を実行してしばらくはなんとか開こうとしている気配があったものの、最終的には何事もなかったように何一つ開かないという事態に・・・。拒否られた・・・。

貧相なVista機で挑戦したのがダメだったのかもしれないので、もう一度違うWindows7機(Core i5だったはず)で開けるかどうかチャレンジしてみようと思う。
開けなかったら加工も参照もできないもんなぁ・・・

[Mediawiki] スパムによる大量更新 (3) 思案中


前回の続き。

MediawikiでUserMergeという拡張機能を使えば、非常に時間はかかりますが2つのスパム利用者アカウントを1つに統合し、最終的にはスパムアカウントを1つにできる、ということがわかりました。

ただし3万件近く登録されてしまったスパム利用者をいちいちUserMergeで1アカウントずつ統合していくような余裕は到底ない・・・。
そこでググりまくったところ、海外サイトで解決策になるかもしれない方法が紹介されているらしい、との情報を得ました。

とりあえずその記事を翻訳してみたところ、PythonとFirefoxアドオンを使ってネックである「1アカウントずつ統合」というめんどくさい作業を自動化する方法のようです。

が。

Pythonがわからないのでどうしようもない。
これを機にPythonを勉強すればいいじゃないか!とも思ったのですが、いかんせんそんな時間の余裕はなく。
今でも1日に10件程度はスパムによる更新が行われてる状態なのでね・・・
とりあえずPythonをインストールして書いてあるコードを実行するまではわからないなりにやってみたけど、エラー出たので泣く泣く諦めました(メンタル弱い)。

しかしよくよくこの一連の方法を見てみると、Pythonでやることは「スパム利用者のアカウントをAnonymousという名前のユーザーに統合して、Anonymousでない方のアカウントを消す」という作業をさせるリンクURLをだーっと並べたHTMLを自動生成する部分なんですよね。

print "<a href=\""+"http://www.xxx.xx/index.php?title=Special:UserMerge&olduser="+line+"&newuser=Anonymous&deleteuser=1"+"&token=123456789123456789""+">User URL Link</a>"

↑Pythonスクリプトの中にこういう部分があるので、ここの「+line+」の部分にアカウント名を入れて、トークンを該当箇所に入れればそれでUserMergeが動くURLができるんじゃないの?と思ったわけですが・・・

上手く行かなかった。「トークンが不正です」って出ちゃった。

もし+line+とトークンの部分を変えるだけでいいんなら、わざわざPython使わなくてもテキストエディタの置換機能とか使えばサクサクっとHTMLは作成できるんじゃないか?と思ったんですがね・・・甘かったですね・・・

でもここに何かヒントがあると思うので、もうちょっと試行錯誤してみようと思います。

[Mediawiki] スパムによる大量更新 (2) UserMerge


前回の続き。

手順(3)のUserMergeというextensionについて。

インストールすると特別ページに「利用者の統合と削除」という項目が追加され、利用者アカウントを別のアカウントに統合することのできる拡張機能です。
例えば利用者アカウントAをBに統合する際に、統合された側のAを削除することができる、というのがポイントな模様。
AをBに統合→CをBに統合→DをBに統合・・・と繰り返していけば、いつかはBの利用者アカウントのみが残る、ということですね。
現在まだ「利用者を削除する」という目的だけの機能はないようで、利用者を消したい時はこのUserMergeを使うのが唯一の策なのかも。

これはまだMediawikiには標準実装されていないようで、Mediawikiサイトからダウンロードが必要です。
Mediawiki – Extension:UserMerge
mws2
↑ここからダウンロード。

ダウンロードしたtar.gzをSSHでサーバ上の「extension」ディレクトリに解凍するか、ローカルで解凍して「extension」ディレクトリにアップロードします。

その後LocalSettings.phpに、先ほどのMediawiki – Extension:UserMergeページに書いてあるコードをコピペし、
mws3
上書きアップロードすれば管理者としてログインした際、特別ページに「利用者の統合と削除」が表示されるようになります。
mws4

「利用者の統合と削除」のページはこんな感じ。
mws5
利用者Aを利用者Bに統合した上でAを削除する場合の記入例です。
「利用者の統合」ボタンをクリックすると、Aのユーザーアカウントが削除され、BにAの投稿履歴が統合されます。

ただ、これで1件1件消していくには3万件近く利用者が登録されてしまっているので、あまりにも遠い道のり・・・
いい策を探しているところです。

[Mediawiki] スパムによる大量更新 (1)


ある日突然、Google Webmaster Toolsから妙なメールが届きました。
wmt

内容としては「Googleはあなたのサイトでユーザーが作成したスパムを検出しました」っていうものなんですが、一応確認しておかねば!と久しぶり(3ヵ月ぐらいノーメンテでした…)にMediawikiで運営しているサイトを見てみたところ、トップページに英語の広告スパムが・・・!
mw-spam1
「最近の更新」を見てみてもこのありさま。ひどい。

特別ページの「統計」を見てみると、以前は150ページ程度しかなかった記事数がなんと70,000ページ近くに!!!(((゜Д゜;)))ヒエー
利用者も数人だったのが30,000人手前まで!!!
ものすごくニッチな対象のWikiなので、アカウントさえ作成すれば投稿・編集できるような設定にしていたんですが、これが大失敗だったようで。
「スパムならわざわざアカウント作成までして書き込みせえへんやろ~」とのんきに考えていたのが非常に甘かった。

スパム内容はTwitterでももはや有名になっているサングラス系から、Minecraftどうたらこうたらとか、「すぐに金を作る方法」とか、海外版出会い系サイトとか、そんな感じです。普通のスパムだ。面白くもなんともねえ。

記録を見ているとそのWikiでは4/1に最初にスパム利用者のアカウント登録が複数あり、4/4から怒涛の投稿と新規アカウント作成フェスティバルが始まったようです。くそー。

なんとかしなくては!と手順について考えてみましたが
(1)まず、一番スパムが目につくメインページを保護する
(2)スパム対策として、日本語での質問に回答しないと新規アカウントが作れないよう、拡張機能「ConfirmEdit」の「Questy Captcha」を有効にして、新規スパムアカウントが作れないようにする
(3)スパム利用者のアカウントをブロックしまくる
(4)スパムアカウントによる投稿を削除しまくる
この流れで行こうと。

(2)については
FREEWIKI – MediaWikiスパム対策
こちらを参考にしました。

(3)については、ブロックより利用者削除がいいと考えて拡張機能の「UserMerge」を使うことに。

(4)は同じくFREEWIKIさんを参考に、標準で付属している拡張機能「Nuke」を導入しました。

(2)に続きます!

[Mediawiki] ページ名(項目名)の変更


Mediawikiでのページ名の変更について覚書。

例えば、「サイトの仕様」とするべき項目名を誤って「サイトの使用」と書いてページを作成してしまっていた場合。

(1) まずはMediawikiにログイン。

(2) 項目名を変更したいページ(今回は「サイトの使用」)に移動し、右上のメニュー「ページ」「議論」「編集」「履歴」等に並んでいる「移動」をクリック。
rename01

(3) 以下のようなフォームが出るので、「新しいページ名」の欄に新しい項目名(今回は「サイトの仕様」)を入力し、「ページを移動」ボタンをクリック。
rename02

(4) 完了。

注意点:
・新しい項目名(今回は「サイトの仕様」)が既に存在する場合は移動できない。
・項目名変更前にサイドメニューの「リンク元」からどのページからリンクされているかを確認しておくとよい。
 移動フォーム入力の際に下部の「移動元に転送ページを作成する」にチェックを入れておくと、元の記事が転送記事となるので、転送でワンクッションは入るものの一応リンク切れは防げる。

【Mediawiki】 出典機能の追加


Wikipediaでよく見る、というかほぼ必須のように推奨されている出典・脚注機能
http://ja.wikipedia.org/wiki/Help:%E8%84%9A%E6%B3%A8
に詳しく書かれていますが
mediawiki_ref
こんな感じの機能。

しかし、MediaWiki 1.21にはバンドルはされているものの、設定をしないと使えないようです。

解説はこちらのページ。

方法はLocalSettings.phpに、

require_once "$IP/extensions/Cite/Cite.php";

を追記して、サーバにアップロードするだけ。

追記する場所ですが、LocalSettings.phpの末尾に

# End of automatically generated settings.
# Add more configuration options below.

自動で生成された設定の最後の部分です。追加の構成設定をこの下に追加して下さい。(意訳^_^;)
という文章があるので、この下に(つまり一番下に)追記しました。

結果、

MediaWiki はPHP言語で書かれたフリーソフトウェアでオープンソースのウィキパッケージソフト。MediaWiki.org へようこそ - [http://www.mediawiki.org/wiki/MediaWiki/ja>http://www.mediawiki.org/wiki/MediaWiki/ja]

== 出典 ==

これが
mediawiki_ref2
このように表示されるようになりました~

【Mediawiki】 サイドバーのカスタマイズ


Seesaa Wiki(旧Livedoor Wiki)から移行してみて、いろいろとMediawikiにも制約が多いなーと思ったのですが、今一番なんとかしたいのはサイドバー部分。

ブログやレンタルWikiに慣れていると、なんというかこう・・・味気ない。
というよりも、何かサイドバーに求めてる機能(目次みたいな)が全然ない感じ。

一般的なブログやレンタルWikiだったらサイドバーに「最近更新されたページ」とか「カテゴリー」とか、そういうサイト内を回るのに便利なメニューがあるけど、Mediawikiではどちらかというと「これわざわざサイドバーに必要?」みたいなものばっかり表示されてる気がする(※あくまで個人的な意見です)。

いろいろ調べた結果、サイドバーに「最近更新されたページへのリンクを何件かリストとして表示」ということはできないらしい。なんだかサイドバーには引数が使えないとか。詳しく調べてないですが・・・

サイドバーに何を表示させるかということは追い追い考えるとして、とりあえずはサイドバーのカスタマイズ方法。

参考URL:
http://www.fukudat.com/wiki/ja/mediawiki
http://www.cudo29.org/mediawiki.html

サイドバーの編集ページを表示させるには、まず
http://MediaWikiを設置したディレクトリ/index.php?title=MediaWiki:Sidebar
をブラウザで開きます。
すると通常の記事のように、右上に「編集」タブが出ているので、それをクリック。
これで編集画面が表示されます。

しかし、なんだか異様な雰囲気・・・

* navigation
** mainpage|mainpage-description
** portal-url|portal
** currentevents-url|currentevents
** recentchanges-url|recentchanges
** randompage-url|randompage
** helppage|help
* SEARCH
* TOOLBOX
* LANGUAGES

↑こんな感じのものが表示されているはず。

↓日本語の設定でインストールしていると、実際には勝手に日本語化されたものが表示されてますもんねぇ。
wiki_sidebar
(※スキンは「Cavendish」を使用中です)

それに、通常の記事ページならウィキ内リンクは[[ページ名|表示名]]という形で入力するのに、[[]]が見当たらないのもなんだかソワソワする。
「ページ名|表示名」 という形式で入力するのは通常記事と一緒だけど、ページ名と表示名が一緒の場合でも「ページ名|ページ名」 とわざわざ入力しないとリンクが張られないみたいです。うーんイレギュラー。

ちなみに、何か修正してから「履歴」で以前の版を見ても、上記のデフォルトの*navigation~というものは表示されないようです。プレビューもプレビューとして成立してないし(笑)、特殊なページなんですかねやっぱり。

*の行がボックスの見出し、**の行がボックスの中のリストに相当するようなので、例えば

* メニュー
** メインページ|メインページ
** このサイトについて|このサイトについて
** FAQ|FAQ
* カテゴリ
** CGI・PHP|CGI・PHP
** HTML|HTML
** CSS|CSS
** 猫|猫関連記事

↑こんな感じで記入すると

↓こう表示される模様。
wiki_sidebar2
「メニュー」は「案内」に、「FAQ」という単語は「よくある質問と回答」に勝手に置き換えられるみたいですね。

ちょっとクセはありますが、カスタマイズはなんとかできそうな気がします!