[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] Mediawikiでスパム利用者の大量のリストを消す方法・和訳


http://simplecloudworks.com/2013/04/how-to-delete-a-long-list-of-spam-users-in-mediawiki/の翻訳。

「Mediawikiでスパム利用者の大量のリストを消す方法」

運営するMediawikiサイトが大量の自動アカウント作成によってスパム攻撃を受けている場合(キャプチャがスパマーへの抑止力にならないことは以前から既に知られています)、一つの予防策としては拡張機能「ConfirmAccount」を使用することが挙げられます。この拡張機能を使えばアカウント作成に管理者の許可が必要となる為、直接アカウントを作成することはできなくなります。

しかし、既に作られている大量のスパム利用者のアカウントはどうやって消せばよいのでしょうか?

「User Merge And Delete」という拡張機能が手助けとなってくれます。一度インストールすればスパムアカウントを他のアカウントに統合でき、データベースから削除することができるのです。ただし、ひとつひとつ。

大量のスパム利用者のアカウントを削除するには、拡張機能User Mergeを自動的化するViswaprabha氏の(未完成ではありますが)独創的な手法を参考にできます。

(1)
・拡張機能UserMergeをインストール
・ブラウザのFirefoxにWeb Developerアドオンをインストールする
・Pythonインタープリタ
・FirefoxにDownThemAll!アドオンをインストールする

Firefoxの拡張機能Web DeveloperでUserMergeのフォームから情報を取り出すことができるのがミソです。
この情報をスパムアカウントのリストと連結し、シンプルなウェブページを作ることができます。
作成されたhtmlページでFirefoxアドオンのDownThemAll!を使うことでUserMergeにスパムユーザーを削除するよう指示ができるのです。

(2)
・Mediawikiの特別ページにある「利用者一覧」からスパム利用者のアカウント名を取得しリストを作成します。表計算ソフトなどにコピー&ペーストやフィルタリングをすることでリストを作成することができます。この時スパムでないアカウントをリストに入れてしまわないようご注意を!

(3)
Firefoxを起動して自分のMediawikiに管理者としてログインし、特別ページ内の利用者の統合と削除ページへ移動します。このページを開いたらWeb Developerツールバーのフォームボタンをクリックし
「form要素のmethod属性値を変更する」>「GETをPOSTに変換」
を選択します。そうするとブラウジングセッションに必要な固有のトークン(例:2c05d520d9b202235c03e8fe8ll8khBなど)が表示されます。

(4)
ここでPythonスクリプトを使って、(2)で作成したリスト(以降「userslist.txt」と表記)を(3)で取得したトークンと紐付けし、htmlファイルを出力します。下記にサンプルスクリプトを記述します。使用の際にはスクリプト内の該当箇所を自分のWikiサイトのドメインとトークンに置き換えて下さい。

#!/usr/bin/python
# Concatenate a list of users to produce URLs which delete them using UserMerge Extension for MediaWiki
# Usage:  python concatenate_UserMerge_MediaWiki.py userslist.txt > userURLlist.html  

import sys

input = open(sys.argv[1])
count = input.readlines()
g = len(count)
input.close()

print ""

input = open(sys.argv[1])

for k in range(g):
        line = input.readline()
        print "User URL Link"

input.close()

print ""

このスクリプトを、例えば「concatenate_UserMerge_MediaWiki.py」と名前をつけた場合のUsageは

python concatenate_UserMerge_MediaWiki.py userslist.txt > userURLlist.html

です。

(5)
最後のステップとして、(4)で作成したhtmlページ(例えばuserURLlist.html)を使います。
このuserURLlist.htmlをFirefoxで開くとリンクで埋め尽くされたページが現れると思いますが、この1つ1つが拡張機能UserMergeへ自分のWikiサイトの中で1つのアカウントを消すという指示の実例ということになります。効率よくこのリンク全てを踏んでUserMergeを実行するために、userURLlist.htmlを開いた状態でFirefoxのアドオン「DownThemAll!」を使用します。この際、(3)でトークンを取得した時から同じセッションでログインしていることが重要です。

userURLlist.htmlのダウンロードが進むにつれ、スパムアカウントがUserMergeによって消されていきます。

[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) 完了。

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

【EC-CUBE】 検索機能で商品名以外も検索対象にする方法


EC-CUBEのデフォルトの検索(サイドバーに表示されている「商品名を入力」の下の検索フィールド)では商品名と検索ワードしか検索対象にしてくれないようです。
eccube-search
試してみたところ、検索ワードすら対象にしていないような気もしましたが・・・

これではもっとあいまいな検索(例えば「使いやすい」とか「プレゼントに」とか「人気」とか)ができず、検索機能としては弱いと言わざるを得ない。
そこで商品名や検索ワードだけでなく、商品説明も含めて検索できるようにしたい!と思い、検索したら方法が見つかりました!

ヒロシの日記 | EC-CUBE 2.11.1で検索キーワードに一覧と詳細ページの文章も含める。

こちらの記事ではバージョン2.11.1での改変場所を紹介して下さっていますが、バージョン2.13.1でもほぼ同じでした。
(LC_Page_Products_List.phpの444行目と書いてありますが、2.13.1では401行目付近でした。それ以外の差はありませんでしたよ)
ちなみにLC_Page_Products_List.phpは、data/class/pages/productsのディレクトリにありました。

これを書いて下さっている通りにLC_Page_Products_List.phpに追記してアップロードし直したらすぐに検索結果がぶわっと増えました!ぶわっと。
例えば、今までは「レトロな」で検索しても0件ヒットだったのが(まぁ商品名に「レトロな」を含んでいるものがなかったので当たり前ですが…)、商品説明が検索範囲に加わったことで15件になりました。素晴らしい・・・

phpに詳しくなくても見たまま追記してアップロードするだけなのでとても簡単です。
ヒロシさんありがとうございました!

【TwentyTwelve】ウィジェット部分のプチカスタマイズ


前回の記事:【TwentyTwelve】サイドバーのカスタマイズ

今回はウィジェットエリアのカスタマイズ。
ウィジェットエリアはサイドバーに表示されている「最近の投稿」「カテゴリー」「アーカイブ」等です。

今回も前回同様「style.css」をいじっていきます。
前回までのカスタマイズでこうなっている状態です↓
sg-005

(1) 背景をカスタマイズ

デフォルトだと背景色が設定されていないので、背景に色をつけようと思います。

変更箇所は
style.css の 611行目あたり

.widget-area .widget {
	-webkit-hyphens: auto;
	-moz-hyphens: auto;
	hyphens: auto;
	margin-bottom: 48px;
	margin-bottom: 3.428571429rem;
	word-wrap: break-word;
}

ここです。

これを

.widget-area .widget {
	-webkit-hyphens: auto;
	-moz-hyphens: auto;
	hyphens: auto;
	margin-bottom: 48px;
	margin-bottom: 3.428571429rem;
	word-wrap: break-word;
/* 以下を追加 */
	background:#ffb6c1;
/* 追加ここまで */
}

こんな感じで変更。
sg-103
背景色がつきました~(カラーネームbisque・#ffb6c1)

(2) 更に枠線をつけてみる

.widget-area .widget {
	-webkit-hyphens: auto;
	-moz-hyphens: auto;
	hyphens: auto;
	margin-bottom: 48px;
	margin-bottom: 3.428571429rem;
	word-wrap: break-word;
	background:#ffb6c1;
/* 以下を追加 */
	border:1px solid #bc8f8f;
/* 追加ここまで */
}

sg-104
こうなります。rosybrown(#bc8f8f)で枠線をつけました。

(3) 余白を設定する

また前回と同じく枠と文字の隙間がないので

.widget-area .widget {
	-webkit-hyphens: auto;
	-moz-hyphens: auto;
	hyphens: auto;
	margin-bottom: 48px;
	margin-bottom: 3.428571429rem;
	word-wrap: break-word;
	background:#ffb6c1;
	border:1px solid #bc8f8f;
/* 以下を追加 */
	padding:10px;
/* 追加ここまで */
}

これで適度に隙間が空きました。
sg-107

(4) ついでに角丸にしちゃう

.widget-area .widget {
	-webkit-hyphens: auto;
	-moz-hyphens: auto;
	hyphens: auto;
	margin-bottom: 48px;
	margin-bottom: 3.428571429rem;
	word-wrap: break-word;
	background:#ffb6c1;
	border:1px solid #bc8f8f;
	padding:10px;
/* 以下を追加 */
	border-radius:10px;
/* 追加ここまで */
}

sg-111
無事に丸まりました。

(5) ウィジェットのタイトルをカスタム

style.css 619行目あたりの

.widget-area .widget h3 {
	margin-bottom: 24px;
	margin-bottom: 1.714285714rem;
}

これを変更します。
背景を#333333(濃いグレー)、文字色をbisque(#ffb6c1)、余白を5pxにしたいので

.widget-area .widget h3 {
	margin-bottom: 24px;
	margin-bottom: 1.714285714rem;
/* 以下を追加 */
	background-color:#333333;
	color:#ffe4c4;
	padding:5px;
/* 追加ここまで */
}

これで
sg-201
一応タイトルっぽい感じは出たかなぁ・・・と。

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


前回の記事:「ヘッダ画像の登録」

今回はサイドバーをプチカスタマイズして行きます。
サイドバーは
sg-001x
これ。
レンタルブログやスクリプトによっていろんな呼び方がありますが、Wordpressで言えばウィジェットが表示されてる所ですね。Wordpressだとデフォルトでは右側にあります。右サイドバーとも言えるかも。

sg-001
ご覧の通りデフォルトだとシンプルすぎてサイド「バー」と言われても何のバー感もないな・・・

(1) 背景をカスタマイズ

デフォルトだと白の背景になっていますが、この背景色を変更してみようと思います。
テーマフォルダ内の「style.css」を使用するので、念のためstyle.cssのバックアップを作っておくと安心かも…
style.cssの変更は、ダッシュボード>外観>テーマ編集 からも行えますし、FTPソフトでダウンロードしてから変更してまたアップロード、という方法もあります。そのへんはお好みで。

変更箇所は
style.css の 533行目あたり

.widget-area {
	margin: 24px 0 0;
	margin: 1.714285714rem 0 0;
}

ここです。

・例えばサイドバー全体に枠をつけたい時は

.widget-area {
	margin: 24px 0 0;
	margin: 1.714285714rem 0 0;
/* 以下を追加 */
	border:1px solid #000000;
/* 追加ここまで */
}

sg-002
黒・1px・直線の枠をつけてます。

・更に、サイドバー全体の背景色を設定したい時は

.widget-area {
	margin: 24px 0 0;
	margin: 1.714285714rem 0 0;
	border:1px solid #000000;
/* 以下を追加 */
	background-color:#ffdab9;
/* 追加ここまで */
}

sg-003
カラーネームpeachpuff(#ffdab9)の背景色にしてます。

・枠と文字の隙間なさすぎ・・・と思ったら、更に更に

.widget-area {
	margin: 24px 0 0;
	margin: 1.714285714rem 0 0;
	background-color:#ffdab9;
	border:1px solid #000000;
/* 以下を追加 */
	padding:10px;
/* 追加ここまで */
}

sg-004
こんな感じで適当に隙間が空きました。

(1) サイドバーの左右を変更する

デフォルトだとサイドバーは右側にありますが、これを左側にしたい場合は
TwentyTwelve サイドバー/記事コンテンツの左右を入れ替える超簡単な方法 | 初めてのワードプレス カスタマイズ
こちらを参考に、style.cssの1464行目あたりの

	.site-content {
		float: left;
		width: 65.104166667%;
	}


1473行目あたりの

	.widget-area {
		float: right;
		width: 26.041666667%;
	}

のfloat:left;とfloat:right;を入れ替えるだけ!
sg-005
無事に左右逆になりました~

次の記事:【TwentyTwelve】ウィジェット部分のプチカスタマイズ

【TwentyTwelve】ヘッダ画像の登録


前回の記事:【TwentyTwelve】背景画像の設定

続きまして今回はヘッダ画像の登録。
今回も簡単にダッシュボードから登録できます!

tt06
「外観」>「カスタマイズ」をクリック。

デフォルトではサイト名と「Just another WordPress site」の文字表記のみです。
tt07
「画像を選択」で、「ファイルを選択」ボタンをクリックしてヘッダ用に用意した画像を選択し、横の「アップロード」ボタンをクリックすると、選択した画像が表示されます。

「切り取って公開する」と「トリミングをせず、このまま画像を公開する」がありますが、「トリミングをせず、このまま画像を公開する」だととりあえず画像を登録してから表示したい部分を指定できるので便利なのかも。

試しに3種類のサイズのヘッダを「トリミングをせず、このまま画像を公開する」で登録してみました。

まずは「おすすめ」と書かれている960px×250pxの画像。(わかりやすいように赤枠をつけています)
tt08

横幅が少し大きい1200px×300pxだとこんな感じ。
tt10
あれ・・・サイズほとんど変わってない。測ってみたら勝手に960×260pxに縮小されていました。

ちょっと小さくした800px×150pxだとこんな感じ。
tt09
左に寄ってしまった・・・。

デフォルトのサイト幅をそのまま使うなら、ヘッダ画像の幅は960pxで作っておいた方が無難なようですね・・・。style.cssでヘッダ画像の位置指定をすればいいだけの話ですが、今回はプチカスタムなのでパス。

画像登録の下側にある「ヘッダーのテキスト」は、デフォルトで表示されているサイト名と「Just another WordPress site」の部分。
「Just another WordPress site」は
「ヘッダー画像上にテキストを表示する」にチェックを入れると、
tt11
こんな感じで表示されるようになります。(文字色は赤にしています)
ヘッダー画像上に、っていうのは「ヘッダー画像の上に重ねて」っていう意味かと思ってました(笑)

「ヘッダー画像上にテキストを表示する」のチェックを外すと、
tt12
こんな感じに。
チェックを入れている時はヘッダ画像とサイト名にトップページへのリンクが張られていましたが、外すとヘッダ画像のみにトップへのリンクが張られるようになりました。

次の記事:【TwentyTwelve】サイドバーのカスタマイズ

【TwentyTwelve】背景画像の設定


2カラム構成のシンプルなテーマが欲しかったので、カスタム方法が入手しやすいTwentyTwelveをぼちぼちいじってみることにしました。
TwentyTwelveも新しいバージョンが出ているらしく、バージョン1.3にアップデートしてからのカスタマイズです。

とりあえずテーマを有効にしてみたところ、シンプルはいいけどなんというか・・・無味乾燥な雰囲気・・・。
tt01
これを「できる範囲で自分好みに」して行きます!

今回はまず基本中の基本、背景画像の登録。

これはダッシュボードからすぐにできるんですね~

tt02
ダッシュボードの「外観」>「カスタマイズ」をクリック。

tt03
左に表示されるメニューの「背景画像」をクリックするとメニューが展開され、「画像なし」をクリックすると新規アップロードのエリアが出てきます。

ここに用意した背景画像をドラッグ&ドロップすると、更に詳細が展開されます。
tt04
・背景の繰り返し
 今回は隙間なく背景画像を並べたいので「タイル」を選択。
 一枚の大きい画像を貼りたい時などは「繰り返しなし」、縦か横にだけ並べたい場合は「水平方向に繰り返し」か「垂直方向に繰り返し」で。
・背景の位置
 背景の繰り返しでタイルを選んだ場合は関係ないと思いますが、「繰り返しなし」「水平方向に繰り返し」「垂直方向に繰り返し」を選んだ場合は希望のものを選択。
・背景スクロール
 画面をスクロールした時に背景も一緒にスクロールするか、それとも元の位置のまま固定するかの選択です。ここもやはりタイルだとどちらでもいいと思いますが・・・なんとなく「固定」にしておくとちょっとトリッキーな気もする。

ここまで設定したら左メニュー一番上のブルーのボタン「保存して公開する」をクリックすれば完了です!
tt05
こんな感じになりました。

簡単すぎてわざわざ記事にする必要もなさげな気がします(笑)

次の記事:【TwentyTwelve】ヘッダ画像の登録