我的 wiki 上有大约 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上的第二条评论(由 Matthew Simoneau 于 2009 年 1 月 13 日发表) 。生成的 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 部分,并在每个后缀加上 C 和 D 部分。C 部分将包括 NewUser(这是一个专门创建的单个虚拟用户 ID)。D部分,令牌字符串是一个会话相关令牌,每个用户每个会话都会更改。因此,每次需要新的会话/批次工作时,您都需要获得一个新的令牌。
通过上述步骤,您应该得到一长串 URL,每个 URL 都可以为一个用户执行合并和删除操作。我们现在可以创建一个简单的 HTML 文件,查看它并在 Firefox 中使用像 DownThemAll 这样的批处理下载器。在每一行的开头和结尾添加两段“Linktext”。还要在顶部和底部添加并将文件另存为(例如:)userlist.html
在 Firefox 中打开文件,使用 DownThemAll 插件并下载所有文件!实际上,您正在访问每个用户的合并和删除页面并单击按钮!
尽管乍一看这可能是一项冗长而棘手的工作,但是一旦您遵循此方法,您就可以删除数以万计的用户,而无需太多手动操作。
您可以通过打开一些下载的 html 文件(或通过在另一个窗口中查看最近的更改)来验证操作是否顺利。
一个优点是它不直接编辑 MySQL 页面。它也不需要直接访问数据库。
我对引用的文本做了一些重写,因为原始文本包含一些缺陷。