Регистрация спамера с обнаружением акисмета - PullRequest
3 голосов
/ 24 марта 2011

У меня большой список пользователей, которые зарегистрировались через веб-сайт без какого-либо активного спам-фильтра во время регистрации.

Я хотел бы выделить, какие зарегистрированные пользователи, скорее всего, являются спамерами. Я пытаюсь использовать akismet для этого, но пока akismet говорит мне, что все пользователи не спаммеры. Вероятно, так как akismet действительно сделан для комментариев, которые недоступны при регистрации.

То, что я посылаю akismet, - это имя пользователя, адрес электронной почты. Для URL я использую домен электронной почты. Для их комментариев я использую: «Привет, я $ username из $ domain, зарегистрированного на $ date с электронной почтой $ email и веб-сайтом $ 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";
}

Ответы [ 3 ]

4 голосов
/ 24 марта 2011

Лучше всего думать об Akismet как о гигантском байесовском спам-фильтре с некоторыми другими эвристиками. Он работает на содержимом сообщения, хронометраже сообщения и, что наиболее важно, на том, как часто он просматривает похожий контент, который считается спамом. Строка, которую вы кормите ей, несколько уникальна, поэтому другие не будут учить ее спаму. Даже если вы каким-то образом пометите эту строку как спам, вы получите целую кучу ложных срабатываний, потому что вы просто пропускаете через нее все учетных записей пользователей.

Если вы считаете, что на вашем сайте могут быть незаконные пользователи, и они не участвовали, просто удалите регистрацию. Если они законны, они могут просто перерегистрировать.

Если пользователи участвуют, просто посмотрите на их вклады. Их спам должен быть очевидным.

2 голосов
/ 24 марта 2011

bucabay, используйте контактную форму на Akismet.com, чтобы связаться с нами. Мы посмотрим, сможем ли мы улучшить ваши результаты.

Вы можете использовать Akismet для проверки регистраций при регистрации, если все сделано правильно. Точность еще не дошла до того, что мы официально рекомендуем ее, но мы работаем над ее улучшением, и вы можете экспериментировать.

У капч есть свой набор проблем. Крупные коммерческие спам-боты ломают их.

0 голосов
/ 24 марта 2011

Вы заново изобретаете колесо, которое было сделано много раз очень успешно. Просто используйте Recaptcha или один из методов здесь - Практические подходы CAPTCHA, не основанные на изображениях?

...