私のウィキには 500 人ほどのスパムボットと約 5 人の実際の登録ユーザーがいます。Nuke を使用してページを削除しましたが、再投稿を続けています。reCaptcha を使用してスパムボットの登録を管理しています。今、一度に約 500 人のユーザーを削除/ブロック/マージする方法が必要です。
2 に答える
テーブルからアカウントをuser
手動で削除するか、少なくとも次のようなクエリで認証情報を無効にすることができます。
UPDATE /*_*/user SET
user_password = '',
user_newpassword = '',
user_email = '',
user_token = ''
WHERE
/* condition to select the users you want to nuke */
(もしあれば、/*_*/
あなたと交換してください。ああ、最初にバックアップを作成してください。)$wgDBprefix
user_password
およびフィールドを消去するとuser_newpassword
、ユーザーはログインできなくなります。また、消去すると、ユーザーがuser_email
電子メールで新しいパスワードを要求できなくなり、消去するとuser_token
、アクティブなセッションがすべて削除されます。
更新:私が最初にこれを投稿して以来、MediaWikiのインストールから多数のスパムユーザーとコンテンツをクリーンアップした経験があります。Webmasters Stack Exchangeのこの回答で、使用した方法(基本的に、最初にデータベースからユーザーを削除し、次に孤立したリビジョンをすべて消去し、最後にrebuildall.phpを実行してリンクテーブルを修正する方法)を文書化しました。。
または、 Extension:RegexBlockが役立つ場合もあります。
「RegexBlockは、正規表現を使用してユーザー名とIPアドレスをブロック、表示、およびブロック解除するためのインターフェイスを備えた特別なページを追加する拡張機能です。」
受け入れられた回答にソリューションを適用することに伴うリスクがあります。このアプローチは、データベースに損傷を与える可能性があります! 参照整合性を維持するために何もせず、ユーザーを不完全に削除し、ほぼ確実に表示エラーを引き起こします。
ここでは、はるかに優れたソリューションが提示されています (前提条件は、ユーザー マージ拡張機能がインストールされていることです)。
回避策によって一括マージを行うには、少し厄介な方法があります。誰かがそれが役に立つことを願っています! (スプレッドシートで少し文字列を連結するスキルが必要です。または、python などのスクリプトを使用するか、一括置換機能を備えたテキスト エディターを使用することもできます)
すべての SPAMuserID のリストを作成し、スプレッドシートまたはテキスト ファイルに保存します。リストは、ユーザー作成ログから作成できます。dB アクセス権がある場合は、Wiki_user テーブルをローカル リストにインポートできます。
(ボタンをクリックして) Merge & Delete User フォームを送信するために使用される post メソッドは、get メソッドに変換する必要があります。これにより、長い URL が取得されます。 メソッドについては、http://www.mathworks.com/matlabcentral/newsreader/view_thread/242300の 2 番目のコメント (2009 年 1 月 13 日付けの Matthew Simoneau による) を 参照してください。結果の URL 文字列は次のようになります。
http://(Wiki ドメイン)/Special:UserMerge?olduser=(OldUserNameHere)&newuser=(NewUserNameHere)&deleteuser=1&token=0d30d8b4033a9a523b9574ccf73abad8%2B\
ここで、この URL を 4 つのセクションに分割します。
A: http: //(Your Wiki domain)/Special:UserMerge?olduser=
B: (OldUserNameHere)
C: &newuser=(NewUserNameHere)&deleteuser=1
D: &token=0d30d8b4033a9a523b9574ccf73abad8%2B\
テキスト エディタまたはスプレッドシートを使用して、各スパム ユーザー ID の前にパート A を付け、サフィックスにそれぞれパート C と D を付けます。パート C には、NewUser (特別に作成された単一のダミー ユーザー ID) が含まれます。パート D のトークン文字列は、セッションごとにユーザーごとに変更されるセッション依存のトークンです。そのため、新しいセッション/バッチの作業が必要になるたびに、新しいトークンを取得する必要があります。
上記の手順で、URL の長いリストを取得する必要があります。各 URL は、1 人のユーザーに対して Merge&Delete 操作を実行するのに適しています。シンプルな HTML ファイルを作成して表示し、Firefox の DownThemAll などのバッチ ダウンローダーを使用できるようになりました。各行の先頭と末尾に「Linktext」をさらに 2 つ追加します。また、上部と下部に追加し、ファイルを(たとえば:) userlist.htmlとして保存します
Firefox でファイルを開き、DownThemAll アドオンを使用して、すべてのファイルをダウンロードします。事実上、各ユーザーの Merge&Delete ページにアクセスし、ボタンをクリックしています!
これは最初は時間のかかるトリッキーな作業に見えるかもしれませんが、この方法に従えば、多くの手作業を行わなくても、何万人ものユーザーを削除できます。
ダウンロードしたいくつかの html ファイルを開く (または別のウィンドウで最近の変更を確認する) ことによって、操作がうまくいっているかどうかを確認できます。
利点の 1 つは、MySQL ページを直接編集しないことです。また、データベースへの直接アクセスも必要ありません。
原文に一部誤りがあったため、引用文を一部加筆修正しました。