【问题标题】:Mediawiki mass user delete/merge/blockMediawiki 大众用户删除/合并/阻止
【发布时间】:2012-05-29 04:55:08
【问题描述】:

我的 wiki 上有大约 500 个垃圾邮件机器人和大约 5 个实际注册用户。我用 nuke 删除了他们的页面,但他们只是继续转发。我使用 reCaptcha 控制了垃圾邮件注册。现在,我只需要一种方法来一次删除/阻止/合并大约 500 个用户。

【问题讨论】:

    标签: wiki mediawiki spam spam-prevention


    【解决方案1】:

    您可以手动从user 表中删除帐户,或者至少通过以下查询禁用其身份验证信息:

    UPDATE /*_*/user SET
      user_password    = '',
      user_newpassword = '',
      user_email       = '',
      user_token       = ''
    WHERE
      /* condition to select the users you want to nuke */
    

    (如果有,请将/*_*/ 替换为您的$wgDBprefix。哦,请先进行备份。)

    清除user_passworduser_newpassword 字段会阻止用户登录。清除user_email 也会阻止他们通过电子邮件请求新密码,清除user_token 会删除他们可能拥有的任何活动会话.


    更新:自从我第一次发布这篇文章以来,我在从 MediaWiki 安装中清理大量垃圾邮件用户和内容方面有了进一步的经验。我已经在this answer on Webmasters Stack Exchange 中记录了我使用的方法(基本上包括首先从数据库中删除用户,然后清除所有现在孤立的修订,最后运行rebuildall.php 来修复链接表)。


    或者,您可能还会发现Extension:RegexBlock 有用:

    “RegexBlock 是一个扩展,它添加了特殊页面,带有使用正则表达式阻止、查看和取消阻止用户名和 IP 地址的界面。”

    【讨论】:

    • 非常感谢。手动删除用户表工作正常。我很高兴 PHPmyAdmin 有一个全选按钮。有 836 个垃圾邮件机器人和 5 个真实用户。
    • 人们可能会发现 Deleteuser 扩展很有帮助,可以避免 SQL 命令出现危险错误的风险。
    【解决方案2】:

    在接受的答案中应用解决方案存在风险。该方法可能会损坏您的数据库!它不完全删除用户,没有做任何事情来保持参照完整性,并且几乎肯定会导致显示错误。

    Here 提供了一个更好的解决方案(前提是您已经安装了User merge extension):

    我有一个有点尴尬的方式来完成批量合并 变通方法。希望有人会觉得它有用! (必须有一点 电子表格中的字符串连接技巧;或者可以使用蟒蛇 或类似的脚本;或使用带有批量替换的文本编辑器 功能)

    1. 准备所有SPAMuserID 的列表,将它们存储在电子表格或文本文件中。该列表可能是 从用户创建日志准备。如果你有 dB访问,可以将Wiki_user表导入本地列表。

    2. 用于提交 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\

    3. 现在,将此 URL 分为四个部分:

     A: http: //(Your Wiki domain)/Special:UserMerge?olduser= 
    
     B: (OldUserNameHere) 
    
     C: &newuser=(NewUserNameHere)&deleteuser=1 
    
     D: &token=0d30d8b4033a9a523b9574ccf73abad8%2B\
    
    1. 现在使用文本编辑器或电子表格,在每个垃圾邮件用户 ID 前面加上 A 部分,并在每个垃圾邮件用户 ID 后面加上 C 和 D 部分。C 部分将包括 NewUser(这是一个专门创建的单个虚拟用户 ID)。 D部分, 令牌字符串是一个依赖于会话的令牌,每次都会更改 每个会话的用户。因此,每次新的令牌时,您都需要获得一个新的令牌 需要会话/批次的工作。

    2. 通过上述步骤,您应该得到一长串 URL,每个 URL 都可以为一个用户执行合并和删除操作。我们现在可以创建一个 简单的 HTML 文件,查看它并使用像 DownThemAll 这样的批处理下载器 在火狐中。 在每行添加两个“链接文本” 始末。还要在顶部和处添加 底部并将文件另存为(例如:)userlist.html

    3. 在 Firefox 中打开文件,使用 DownThemAll 插件并下载所有文件!实际上,您正在访问合并和删除页面 每个用户并点击按钮!

    虽然起初这可能看起来是一项冗长而棘手的工作,但一旦你 按照这个方法,你可以删除数以万计的用户,而无需 大量的手动工作。

    您可以通过打开一些 下载的 html 文件(或通过查看最近的更改 另一个窗口)。

    一个优点是它不直接编辑 MySQL 页面。它也不需要直接访问数据库。

    我对引用的文字做了一些改写,因为原文有一些缺陷。

    【讨论】:

    • 实际上,我的回答中给出的查询不会删除 any 用户(它只是禁用他们的身份验证信息,因此他们无法登录),因此不会破坏参考完整性(不是 MediaWiki 曾经很关心这一点,无论如何)并且不应导致任何显示问题(除非您的 Special:ListUsers 仍将被垃圾邮件帐户填充)。也就是说,在大多数情况下,我不再推荐这种方法。 just delete the spam users and their contribs entirely, and then use maintenance scripts to fix the database 更干净。
    • @IlmariKaronen,感谢您提供的链接,这似乎也是一个不错的解决方案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-16
    • 2021-09-05
    • 2021-10-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多