MediaWikiの匿名投稿者・編集者のIPアドレスを非表示(もしくは別の文字列に置き換える)方法。 なお、MediaWiki Ver.1.14.1に対応。
目次 |
正規表現(preg_replace)を使うことで、IPアドレスを一律に特定文字に置き換えることができます。 MediaWikiのインストールフォルダにある、該当ファイルに以下を追記しましょう。
includes/PageHistory.phpを編集します。 各ページの編集履歴に表示される、IPアドレスを別の文字列に置き換えます。
wfRunHooks( 'PageHistoryLineEnding', array( &$row , &$s ) );
MediaWikiのVer.によっては
wfRunHooks( 'PageHistoryLineEnding', array( $this, &$row , &$s ) );
この行の次に以下を追記してください。
$s = preg_replace('/([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})/', '名無しさん', $s);
includes/diff/DifferenceEngine.phpを編集します。1.14からはincludes/diff/DifferenceEngine.phpです。 履歴の差分表示をした際に表示される、IPアドレスを別の文字列に置き換えます。
'<div id="mw-diff-otitle2">' . $sk->revUserTools( $this->mOldRev, true ) . "</div>" .
以下のコードに書き換えてください。
'<div id="mw-diff-otitle2">' . preg_replace('/([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})/', '名無しさん', $sk->revUserTools( $this->mOldRev, true )) . "</div>" .
'<div id="mw-diff-ntitle2">' . $sk->revUserTools( $this->mNewRev, true ) . " $rollback</div>" .
以下のコードに書き換えてください。
'<div id="mw-diff-ntitle2">' . preg_replace('/([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})/', '名無しさん', $sk->revUserTools( $this->mNewRev, true )) . " $rollback</div>" .
ここで2か所を書き換える理由は、差分表示した際に前版と最新版との2つの編集者履歴が表示されるからです。
includes/ImagePage.phpを編集します。 画像ページの履歴に表示される、IPアドレスを別の文字列に置き換えます。
$s = $list->beginImageHistoryList($navLink);
この次の行に以下を追記してください。
$s = preg_replace('/([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})/', '名無しさん', $s);
includes/ImageGallery.phpを編集します。
Special:NewImagesに表示される、IPアドレスを別の文字列に置き換えます。
. $textlink . $text . $nb
以下のコードに書き換えてください。
. $textlink . preg_replace('/([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})/', '名無しさん', $text) . $nb
includes/special/SpecialRecentchanges.phpを編集します。 Special:Recentchangesに表示される、IPアドレスを別の文字列に置き換えます。
$s .= $list->endRecentChangesList();
以下のコードに書き換えてください。
$s = preg_replace('/([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})/', '名無しさん', $s);
最近更新したページの、配信されるRSSフィードに編集者情報が表示されます。その部分を置き換えないと、IPアドレスがそのまま表示されてしまうため、上記だけでは不完全です。
includes/Feed.phpを編集します。
<?php if( $item->getAuthor() ) { ?><dc:creator><?php print $item->getAuthor() ?></dc:creator><?php }?>
上記を下記に書き換えてください。
<?php if( $item->getAuthor() ) { ?><dc:creator><?php print preg_replace('/([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})/', '名無しさん', $item->getAuthor()) ?></dc:creator><?php }?>
<?php if( $item->getAuthor() ) { ?><author><name><?php print $item->getAuthor() ?></name></author><?php }?>
上記を下記に書き換えてください。
<?php if( $item->getAuthor() ) { ?><author><name><?php print preg_replace('/([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})/', '名無しさん', $item->getAuthor()) ?></name></author><?php }?>
書き換え箇所が2つ存在するのは、RSS2.0とAtomの両方をMediaWikiがサポートしているからです。 もし、RSSフィードを配信しないのであれば、LocalSettings.phoで$wgFeedをfalseにしてください。
includes/special/SpecialNewpages.phpを編集します。 Special:Newpagesに表示される、IPアドレスを別の文字列に置き換えます。
$ulink = $this->skin->userLink( $result->rc_user, $result->rc_user_text ) . ' ' . $this->skin->userToolLinks( $result->rc_user, $result->rc_user_text );
この行の次に以下を追記してください。
$ulink = preg_replace('/([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})/', '名無しさん', $ulink);
この方法でIPアドレスをMediaWiki上に一切表示しなくなります。しかし、これは投稿者のIPアドレスを"名無しさん"に置き換えて表示しているだけなので、IPアドレスが記録されていないというわけではありません。 投稿者のIPアドレスを調べてたい場合、以上のうちどれかを削除することで確認することが出来ます。
includes/User.phpにある"$this->mName = IP::sanitizeIP( wfGetIP() );"を"$this->mName = 名無し;"と書き換える。これだけ。
これによって、匿名ユーザーはIPアドレスが表示されることなく名無しさんと表示される。これを使用すると、MediaWiki上では名無しというアカウントを持った人が投稿したと言うことになり、IPアドレス置き換えとは違ってMediaWiki上で誰か一人についてあれこれ調べることができなくなる。
また、名無しというアカウントが既に存在していたり、後から取得されたりすると、その人が投稿したことになってしまう。この場合はUsername BlacklistやTitle Blacklistを使って事前に防ぐことが出来る。