如何设置它以使 MediaWiki 不允许单个电子邮件地址创建多个帐户?垃圾邮件机器人刚刚使用一封电子邮件创建了 5 个帐户。
我一直在寻找配置设置或扩展,但没有找到。
与此相关的一个问题是使用类似于JameeiohpbrxvlsHeadlon的用户名创建令人讨厌的垃圾邮件帐户。
垃圾邮件预防措施效果很好,因为没有创建实际的垃圾邮件文章,而只是创建了垃圾邮件帐户。我安装了 TorBlock、ConfirmEdit 和 SimpleAntiSpam 以防止创建垃圾邮件帐户,但这似乎失败了。
如何设置它以使 MediaWiki 不允许单个电子邮件地址创建多个帐户?垃圾邮件机器人刚刚使用一封电子邮件创建了 5 个帐户。
我一直在寻找配置设置或扩展,但没有找到。
与此相关的一个问题是使用类似于JameeiohpbrxvlsHeadlon的用户名创建令人讨厌的垃圾邮件帐户。
垃圾邮件预防措施效果很好,因为没有创建实际的垃圾邮件文章,而只是创建了垃圾邮件帐户。我安装了 TorBlock、ConfirmEdit 和 SimpleAntiSpam 以防止创建垃圾邮件帐户,但这似乎失败了。
这不太可能是一种非常有效的反垃圾邮件策略。大多数垃圾邮件机器人很聪明,可以用有效的电子邮件地址注册帐户,也很可能在注册失败时尝试新地址。
就个人而言,我发现小型 wiki 最有效的反垃圾邮件解决方案是ConfirmEdit with QuestyCaptcha。只需将 ConfirmEdit 配置为需要 CAPTCHA 来创建帐户,这样您就不会收到垃圾邮件帐户。这些问题不需要很难回答——事实上,只要它们对您的网站来说是独一无二的,它们绝对是微不足道的。
也就是说,您可以通过编写AbortNewAccount 挂钩来执行您的建议,以在数据库中查找用户的电子邮件地址,如果找到匹配项则失败,如下所示(未经测试!):
$wgHooks['AbortNewAccount'][] = 'disallowDuplicateEmails';
function disallowDuplicateEmails( $user, &$message ) {
$email = $user->getEmail();
if ( !$email ) return true; // allow empty e-mail
$dbr = wfGetDB( DB_SLAVE );
$name = $dbr->selectField( 'user', 'user_name',
array( 'user_email' => $email ),
__METHOD__ );
if ( $name !== false) {
$message = wfMessage( 'signup-dup-email', $email, $name )->text();
return false;
}
return true; // no match
}
您还需要创建系统消息页面MediaWiki:signup-dup-email
,内容如下:
The e-mail address <tt>$1</tt> is already used by [[User:$2|$2]].
请注意,此类检查至少存在两个潜在问题:
它可以允许人们通过尝试使用他们怀疑可能属于现有用户的地址注册一个新帐户来“钓鱼”您用户的电子邮件地址(MediaWiki 通常将其视为私人信息)。通过从错误消息中省略用户名可以在一定程度上缓解这种情况,但这仍然会泄露某人正在使用该地址的信息。
上面的代码不检查地址是否已被确认(并且检查它宁愿破坏其目的,除非您还要求所有用户确认他们的电子邮件地址),因此恶意的人可以阻止其他人通过创建具有相同地址的虚拟帐户来使用他们的电子邮件地址进行注册。
但是,绕过检查实际上会很容易,因为 a) 它检查完全匹配,因此例如仅更改主机名的大写就足以使检查通过,并且 b) 它不会阻止用户无论如何,从注册后将他们的电子邮件地址更改为他们想要的任何内容。这两个洞都可以堵住,但需要更多的努力。