如何使MediaWiki帐户注册只允许唯一的电子邮件?

Mas*_*len 3 mediawiki

如何设置它以便MediaWiki不允许单个电子邮件地址创建多个帐户?一个spambot只用一封电子邮件创建了5个帐户.

我已经找了配置设置或扩展,但一直找不到.

与此相关的一个问题是恼人的垃圾邮件帐户的创建,其用户名与JameeiohpbrxvlsHeadlon类似.

垃圾邮件防护测量工作得很好,因为没有创建实际的垃圾邮件文章,只有垃圾邮件帐户.我安装了TorBlock,ConfirmEdit和SimpleAntiSpam以防止创建垃圾邮件帐户,但这似乎失败了.

Ilm*_*nen 6

这可能不是一个非常有效的反垃圾邮件策略.如果注册失败,大多数智能足以智能注册具有有效电子邮件地址的帐户可能也足够聪明,可以尝试新地址.

就个人而言,我已经找到了维基小的最有效的反垃圾邮件解决方案将ConfirmEditQuestyCaptcha.只需配置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
}
Run Code Online (Sandbox Code Playgroud)

您还需要创建系统消息页面MediaWiki:signup-dup-email,其内容如下:

The e-mail address <tt>$1</tt> is already used by [[User:$2|$2]].
Run Code Online (Sandbox Code Playgroud)

请注意,此类检查至少存在两个潜在问题:

  • 它可以允许人们通过尝试使用他们怀疑可能属于现有用户的地址注册新帐户来"捕获"用户的电子邮件地址(MediaWiki通常将其视为私人信息).通过从错误消息中省略用户名可以稍微减轻这种情况,但这仍然会泄漏某人使用该地址的信息.

  • 上面的代码不检查地址是否已被确认(并检查是否会破坏其目的,除非您还要求所有用户确认其电子邮件地址),因此恶意的人可能会阻止其他人通过创建具有相同地址的虚拟帐户来注册其电子邮件地址.

然而,绕过检查实际上相当容易,因为a)它检查完全匹配,所以例如只更改主机名的大写就足以使检查通过,并且b)它不会阻止用户无论如何,注册后将他们的电子邮件地址更改为他们想要的任何内容.这两个洞都可以被阻挡,但需要更多的努力.