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

如何使MediaWiki帐户注册只允许唯一的电子邮件?,mediawiki,Mediawiki,如何设置它,使MediaWiki不允许一个电子邮件地址创建多个帐户?一个垃圾邮件刚刚用一封电子邮件创建了5个帐户 我已经查找了配置设置或扩展,但没有找到 与此相关的一个问题是使用类似于JameeiohpbrxvlsHeadlon的用户名创建垃圾邮件帐户 垃圾邮件预防措施非常有效,因为没有创建实际的垃圾邮件文章,只有垃圾邮件帐户。我安装了TorBlock、ConfirmEdit和SimpleAntiSpam以防止创建垃圾邮件帐户,但这似乎失败了 这不太可能是一种非常有效的反垃圾邮件策略。大多数聪明

如何设置它,使MediaWiki不允许一个电子邮件地址创建多个帐户?一个垃圾邮件刚刚用一封电子邮件创建了5个帐户

我已经查找了配置设置或扩展,但没有找到

与此相关的一个问题是使用类似于JameeiohpbrxvlsHeadlon的用户名创建垃圾邮件帐户


垃圾邮件预防措施非常有效,因为没有创建实际的垃圾邮件文章,只有垃圾邮件帐户。我安装了TorBlock、ConfirmEdit和SimpleAntiSpam以防止创建垃圾邮件帐户,但这似乎失败了

这不太可能是一种非常有效的反垃圾邮件策略。大多数聪明到可以用有效的电子邮件地址注册帐户的垃圾邮件管理员也可能聪明到可以在注册失败时尝试新地址

就我个人而言,我发现了最有效的针对小型维基的反垃圾邮件解决方案。只需将ConfirmEdit配置为在创建帐户时需要验证码,这样您就不会获得垃圾邮件帐户。这些问题不需要很难回答——事实上,只要它们是你的网站所独有的,它们可以是绝对微不足道的


也就是说,您可以按照您的建议,编写一个在数据库中查找用户电子邮件地址的命令,如果找到匹配项,则会失败,类似这样的操作(未测试!):

$wgHooks['AbortNewAccount'][]=“不允许重复电子邮件”;
功能不允许重复电子邮件($user,&$message){
$email=$user->getEmail();
if(!$email)返回true;//允许空电子邮件
$dbr=wfGetDB(DB_从机);
$name=$dbr->selectField('user','user\u name',
数组('user_email'=>$email),
__方法(1);
如果($name!==false){
$message=wfMessage('signup dup email',$email,$name)->text();
返回false;
}
返回true;//不匹配
}
您还需要创建系统消息页面
MediaWiki:signup dup email
,内容如下:

The e-mail address <tt>$1</tt> is already used by [[User:$2|$2]].
电子邮件地址$1已被[[用户:$2 |$2]]使用。
请注意,此类检查至少存在两个潜在问题:

  • 它可以让人们通过尝试注册一个新帐户来“搜索”您用户的电子邮件地址(MediaWiki通常将其视为私人信息),他们怀疑该地址可能属于现有用户。通过从错误消息中省略用户名,可以在一定程度上缓解这种情况,但这仍然会泄漏某人正在使用该地址的信息

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


然而,绕过检查实际上是相当容易的,因为a)它检查精确匹配,因此,例如,仅更改主机名的大小写就足以使检查通过,并且b)无论如何,它不会阻止用户在注册后将其电子邮件地址更改为他们想要的任何地址。这两个漏洞都可能被堵塞,但需要更多的努力。

这不会停止创建帐户,因为“AddNewAccount”钩子是在创建完成后运行的。您可能想使用“AbortNewAccount”钩子来取消帐户创建操作,我确实在代码中使用了错误的钩子名称。固定的。谢谢,@Gregra!