【发布时间】:2012-05-29 04:55:08
【问题描述】:
我的 wiki 上有大约 500 个垃圾邮件机器人和大约 5 个实际注册用户。我用 nuke 删除了他们的页面,但他们只是继续转发。我使用 reCaptcha 控制了垃圾邮件注册。现在,我只需要一种方法来一次删除/阻止/合并大约 500 个用户。
【问题讨论】:
标签: wiki mediawiki spam spam-prevention
我的 wiki 上有大约 500 个垃圾邮件机器人和大约 5 个实际注册用户。我用 nuke 删除了他们的页面,但他们只是继续转发。我使用 reCaptcha 控制了垃圾邮件注册。现在,我只需要一种方法来一次删除/阻止/合并大约 500 个用户。
【问题讨论】:
标签: wiki mediawiki spam spam-prevention
您可以手动从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 安装中清理大量垃圾邮件用户和内容方面有了进一步的经验。我已经在this answer on Webmasters Stack Exchange 中记录了我使用的方法(基本上包括首先从数据库中删除用户,然后清除所有现在孤立的修订,最后运行rebuildall.php 来修复链接表)。
或者,您可能还会发现Extension:RegexBlock 有用:
“RegexBlock 是一个扩展,它添加了特殊页面,带有使用正则表达式阻止、查看和取消阻止用户名和 IP 地址的界面。”
【讨论】:
在接受的答案中应用解决方案存在风险。该方法可能会损坏您的数据库!它不完全删除用户,没有做任何事情来保持参照完整性,并且几乎肯定会导致显示错误。
Here 提供了一个更好的解决方案(前提是您已经安装了User merge extension):
我有一个有点尴尬的方式来完成批量合并 变通方法。希望有人会觉得它有用! (必须有一点 电子表格中的字符串连接技巧;或者可以使用蟒蛇 或类似的脚本;或使用带有批量替换的文本编辑器 功能)
准备所有SPAMuserID 的列表,将它们存储在电子表格或文本文件中。该列表可能是 从用户创建日志准备。如果你有 dB访问,可以将Wiki_user表导入本地列表。
用于提交 Merge & Delete User 表单(通过单击按钮)的 post 方法应转换为 get 方法。这 会给我们一个长网址。见第二条评论(马修·西蒙诺) 日期为 2009 年 1 月 13 日)在 http://www.mathworks.com/matlabcentral/newsreader/view_thread/242300 为方法。 生成的 URL 字符串应如下所示:
http://(您的 Wiki 域)/Special:UserMerge?olduser=(OldUserNameHere)&newuser=(NewUserNameHere)&deleteuser=1&token=0d30d8b4033a9a523b9574ccf73abad8%2B\
现在,将此 URL 分为四个部分:
A: http: //(Your Wiki domain)/Special:UserMerge?olduser=
B: (OldUserNameHere)
C: &newuser=(NewUserNameHere)&deleteuser=1
D: &token=0d30d8b4033a9a523b9574ccf73abad8%2B\
现在使用文本编辑器或电子表格,在每个垃圾邮件用户 ID 前面加上 A 部分,并在每个垃圾邮件用户 ID 后面加上 C 和 D 部分。C 部分将包括 NewUser(这是一个专门创建的单个虚拟用户 ID)。 D部分, 令牌字符串是一个依赖于会话的令牌,每次都会更改 每个会话的用户。因此,每次新的令牌时,您都需要获得一个新的令牌 需要会话/批次的工作。
通过上述步骤,您应该得到一长串 URL,每个 URL 都可以为一个用户执行合并和删除操作。我们现在可以创建一个 简单的 HTML 文件,查看它并使用像 DownThemAll 这样的批处理下载器 在火狐中。 在每行添加两个“链接文本” 始末。还要在顶部和处添加 底部并将文件另存为(例如:)userlist.html
在 Firefox 中打开文件,使用 DownThemAll 插件并下载所有文件!实际上,您正在访问合并和删除页面 每个用户并点击按钮!
虽然起初这可能看起来是一项冗长而棘手的工作,但一旦你 按照这个方法,你可以删除数以万计的用户,而无需 大量的手动工作。
您可以通过打开一些 下载的 html 文件(或通过查看最近的更改 另一个窗口)。
一个优点是它不直接编辑 MySQL 页面。它也不需要直接访问数据库。
我对引用的文字做了一些改写,因为原文有一些缺陷。
【讨论】: