使用Akismet进行注册垃圾邮件检测

4

我有一个大量的用户列表,这些用户在注册时没有启用任何垃圾邮件过滤器。

我想区分哪些注册用户很可能是垃圾邮件发送者。我试图使用Akismet来实现这一点,但到目前为止,Akismet告诉我所有用户都不是垃圾邮件发送者。这可能是因为Akismet真正用于评论,而在注册期间评论是不可用的。

我向Akismet发送的内容包括用户名、电子邮件地址。对于URL,我使用电子邮件域名。对于他们的评论,我使用以下格式:"Hi, I'm $username from $domain registered on $date with email $email and website $url"。

然而,就像我说的那样,即使用户看起来像是垃圾邮件发送者,这种方法总是返回有效的用户。

如果您对完整代码感兴趣:

<?php

// bring php process to this dir
chdir(dirname(__FILE__));


// include Joomla Framework
require('../bootstrap-joomla.php');

// akismet class
require('akismet.class.php');

/**
 * Retrieves users not yet validated
 */
function getUsers($userid, $limit = 10) {
  global $database;
  $database->setQuery("SELECT * FROM jos_users WHERE akismet_validated = 0 LIMIT " . intval($limit));
  $Users = $database->loadObjectList();
  return $Users;
}

/**
 * sets the validation results for the user
 */
function saveValidationResult($userid, $spammer) {
  global $database;
  $database->setQuery("UPDATE jos_users set akismet_validated = 1, akismet_spammer = " . intval($spammer) . " WHERE id = " . $userid . " LIMIT 1");
  return $database->query();
}

// get non validated users
$Users = getUsers();

// validate each user
foreach($Users as $User) {
  list($user, $domain) = explode('@', $User->email);

  $name = $User->username;
  $email = $User->email;
  $url = $domain;
  $comment = "Hello, I am $name, registered on $User->registerDate from <a href=\"$url\">$url</a>.\r\n";


  $akismet = new Akismet('http://www.fijiwebdesign.com/', 'c511157d1d98');
  $akismet->setCommentAuthor($name);
  $akismet->setCommentAuthorEmail($email);
  $akismet->setCommentAuthorURL($url);
  $akismet->setCommentContent($comment);
  //$akismet->setPermalink('http://www.fijiwebddesign.com/');


  echo "$User->id, $User->username : ";
  if($akismet->isCommentSpam()) {
    saveValidationResult($User->id, true);
    echo "Spammer";
  } else {
    saveValidationResult($User->id, false);
    echo "Not Spammer";
  }

  echo "\r\n";
}

你不能仅凭电子邮件地址和域名来检测垃圾邮件发送者,甚至不要尝试。在表单上使用CAPHACHA注册用户,然后您只需查看他们发布的内容即可。 - user557846
3个回答

4
最好将Akismet视为一个带有其他启发式算法的巨大贝叶斯垃圾邮件过滤器。它依靠文章的内容,发布时间以及最重要的是,它是否经常看到类似的被报告为垃圾邮件的内容。你输入的字符串是独特的,所以其他人不会将其标记为垃圾邮件。即使你以某种方式将该字符串标记为垃圾邮件,你也会得到大量的误报,因为你只是将所有用户账户都通过它。
如果你认为你的网站上可能有非法用户,并且他们没有参与,那么就删除注册。如果他们是合法的,他们可以重新注册。
如果用户正在参与,请查看他们的贡献。他们的垃圾邮件程度应该很明显。

1
谢谢你的回答。我的想法是,我相信其他人也考虑过使用Akismet进行注册,因此它会有一些猜测。如果它没有用于那个目的,那么我认为你的答案是最接近的。可能需要检查的贡献是许多注册用户是为了下载产品而不是参与,因此这将淘汰很小一部分。 - bucabay

2
如果正确使用,您可以使用Akismet来检查注册。准确性还没有达到我们正式推荐的水平,但我们正在努力改进它,欢迎您进行实验。
验证码也有自己的一套问题。主要的商业垃圾邮件机器人会破解它们。

有什么技巧可以生成评论以获得更好的结果吗?我并不真的担心准确性,只需要足够的内容,以便我们可以让人类来处理剩下的部分。 - bucabay
4
你从他们那里得到了有关如何为注册表单撰写内容的答案吗? - Meglio

-1

1
感谢Brent的回答。但我不是在寻找预防措施,我需要清理现有的用户数据库。 - bucabay
啊,我明白了。我误解了意图。你说的用户有多少?你的网站现在有垃圾帖子出现吗?要让Akismet适用于你的目的可能会很困难,因为你缺少一些他们正在衡量的关键指标。 - Brent Friar

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接