MediawikiにAdSenseを貼り付ける最も簡単な方法

別記事で書いたように長年放置されていたMediawikiがスパムの温床になっていた。「このまま消してしまおうか」とも思ったのだが癪にさわるので逆に広告をつけてやろうと考えた。一応失敗も踏まえて試行錯誤した結果を書いておこうと思う。

まず絶対にやって置くべきこと

ドヤ顔で「絶対やったほうがいいですよ」と書くわけだがこれはどちらかというと自分の失敗を踏まえてのものだ。かなりトラフィックが食われるので下手したらこれでサーバーのリソースが食われかねない。

  • まず、新規のユーザー登録ができないように設定を変えておく。
  • 次に、ユーザー登録しない人がページを作れないように設定を変える。
  • さらにGoogle Analytics Extensionを導入して新規ページに誰かがアクセスしてきたらわかるようにする。ユーザー登録しているログインユーザーは記録から外されてしまうのだが登録していない第三者がページを踏んだ時にわかるので、仮に何らかの手段で破られても対策ができる。

ここまで済んだらようやくAdSenseコードを貼ることができる。
いろいろ検索して見たのだがやり方はいくつあるようだ。

  1. スキンを改良してコードを貼り付ける。このやり方を試そうとしたがスキンは単純なPHPではないのでどこを見ていいかわからなかった。おそらくこのやり方であれば自動広告が使えるはずである。
  2. 一応AdSenseのプラグインもあるにはあるのだがうまく使えなかった。テンプレートのどこに広告を置いていいのかがわからなかった。
  3. 告知ができるエクステンションがありHTMLコードをスキンのヘッダーに追加できる。javascriptも安心して追加できるのだという。エクステンションの名前はhtmletsという。今回はこれを使った。形式としてはなんでも使えるはずだが「サイトを自動的に分析して広告の置き場所を決める」コードは使えなかった。だがレスポンシブ広告やインラインブロック広告などは使えるようだ。あくまでも本来の目的は告知なのでページトップに広告がつく。だが設置方法はこちらの方が簡単だった。

htmletsのやり方は次の通りだ。

  1. htmletsエクステンションをダウンロードして設置する。
  2. htmletsが参照するhtml置き場のディレクトリを設置する。

新しく作ったディレクトリの中にhtmlファイルを置く。内容はJavascriptが入っているだけのものになる。

これで無事に広告の表示ができるようになった。

このカテゴリの記事の全文はこちらから読めます。

中途半端な状態で設置してあったMediawikiがスパム被害を受ける

Google Compute Engineとは全く関係がない話なのですがMediawikiがスパム被害を受けました。旧サーバーを整理し「そもそも何が帯域を食っていたんだろうか?」ということを調べたところ、mediawikiがかなりアクセスされているようだということがわかりました。

このMediawikiは何かの事情で編集ができなくなりローカルに移行した記憶があります。内容は過去の読書記録でした。ふと「もういっかい最初から入れて見たら入るのではないか」と思い立ち、PHPのバージョンが上がっていることを確認、データベースを最初から作り直したところあっさりと更新に成功します。その日はそれで「よかった」と思いました。

次の日にローカルにあった内容を復元しようとして「誰でも編集ができる」ことを思い出しました。間抜けな話ですがすっかり忘れていたんですよね……wikiがどんなものかを。

で、全てのユーザーを見て見たところ100アカウントぐらいのスパムアカウントと膨大な数の新規ページができていました。Mediawikiはアカウントの削除とページの削減が難しく、最終的には手作業で潰して行くことになりました。

誰にも設置を告知していないわけですから前からおそらく狙われていたんだろうなあと思いました。利用帯域量からみて膨大なページができていた可能性もあります。

ですが古いデータベースを削除しているわけですからどんな恐ろしいことが起きていたのかは今となってはわかりません。

知らないって……恐ろしいです。

慌ててGoogle Analyticsのプラグインを入れました。ログインユーザーは感知できないんですが、誰かがサイトを踏んだら検知できるようにするためです。

あと設定も変えました。知っている人から見ると「何をドヤ顔で書いているんだ」と思われるかもしれませんが……

$wgGroupPermissions[‘‘][‘edit’] = false; //ユーザー以外のページ編集不可 $wgGroupPermissions[‘‘][‘createaccount’] = false; //アカウント新規作成の禁止

ですね。

これだけはやっておいたほうがいいです。

ということで中途半端に設置してしまうと大変痛い目を見るんだなあということをしみじみと感じました。

設置者自身がログインできない状態だったわけで表示も崩れていたんですがまさか新規の参加者が自由にページが作れるとは……全く盲点だったわけです。

このカテゴリの記事の全文はこちらから読めます。