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


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

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

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

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

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

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

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

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

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

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

[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】転送ページ(リダイレクトページ)の作成方法


http://www.mediawiki.org/wiki/Help:Redirects/jaを見たのでメモ。

まずは転送元にしたい記事名で新しくページを作成する。
作成したページに
#REDIRECT [[ページ名]]
というコードを書き込む。(ページ名の部分に転送先となる記事名を入れる)
※注:#の前に空白や他の文字を入力するとリダイレクトできなくなるので、必ず#を先頭に。

例えば、「かぼちゃ」を「南瓜」に転送したい場合は
「かぼちゃ」という名前のページを作成して、ページ内に「#REDIRECT [[南瓜]]」と書き込むだけ。

プレビューすると
redirect
このようにリダイレクト先が表示される。

これで「ページを保存」ボタンをクリックすると転送が実際に機能し始め、転送元のページ名での検索、内部リンクなどでもクッションページなしに即転送されるようになる。

転送された先のページには
redirect2
このように「~から転送」という小さなリンクが表示されるので、ここからリダイレクトの編集や削除もできる。

【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」という単語は「よくある質問と回答」に勝手に置き換えられるみたいですね。

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