function spam_login_filter_check_spammer($register_email, $register_ip, $checkemail = true) { $spammer = false; if ($checkemail) { $email_whitelisted = spam_login_filter_is_email_whitelisted($register_email); } else { $email_whitelisted = true; } $ip_whitelisted = spam_login_filter_is_ip_whitelisted($register_ip); if ($email_whitelisted && $ip_whitelisted) { // short circuit return true; } //Mail domain blacklist if (elgg_get_plugin_setting('use_mail_domain_blacklist', 'spam_login_filter') == "yes" && !$email_whitelisted) { $blacklistedMailDomains = preg_split('/\\s+/', spam_login_filter_custom_strip_tags(elgg_get_plugin_setting('blacklisted_mail_domains', 'spam_login_filter')), -1, PREG_SPLIT_NO_EMPTY); $mailDomain = explode("@", $register_email); foreach ($blacklistedMailDomains as $domain) { if ($mailDomain[1] == $domain) { register_error(elgg_echo('spam_login_filter:access_denied_domain_blacklist')); spam_login_filter_notify_admin($register_email, $register_ip, "Internal domain blacklist"); $spammer = true; break; } } } if (!$spammer) { //Mail blacklist if (elgg_get_plugin_setting('use_mail_blacklist', 'spam_login_filter') == "yes" && !$email_whitelisted) { $blacklistedMails = preg_split('/\\s+/', spam_login_filter_custom_strip_tags(elgg_get_plugin_setting('blacklisted_mails', 'spam_login_filter')), -1, PREG_SPLIT_NO_EMPTY); foreach ($blacklistedMails as $blacklistedMail) { if ($blacklistedMail == $register_email) { register_error(elgg_echo('spam_login_filter:access_denied_mail_blacklist')); spam_login_filter_notify_admin($register_email, $register_ip, "Internal e-mail blacklist"); $spammer = true; break; } } } } if (!$spammer) { //StopForumSpam if (elgg_get_plugin_setting('use_stopforumspam', 'spam_login_filter') == "yes") { //check the e-mail adress $url = "http://www.stopforumspam.com/api?email=" . $register_email . "&f=serial"; $return = spam_login_filter_file_get_conditional_contents($url); if ($return != false) { $data = unserialize($return); $email_frequency = $data['email']['frequency']; if ($email_frequency != '0' && !$email_whitelisted) { register_error(elgg_echo('spam_login_filter:access_denied_mail_blacklist')); spam_login_filter_notify_admin($register_email, $register_ip, "Stopforumspam e-mail blacklist"); $spammer = true; } } if (!$spammer && !$ip_whitelisted) { //e-mail not found in the database, now check the ip $url = "http://www.stopforumspam.com/api?ip=" . $register_ip . "&f=serial"; $return = spam_login_filter_file_get_conditional_contents($url); if ($return != false) { $data = unserialize($return); $ip_frequency = $data['ip']['frequency']; if ($ip_frequency != '0') { register_error(elgg_echo('spam_login_filter:access_denied_ip_blacklist')); spam_login_filter_notify_admin($register_email, $register_ip, "Stopforumspam IP blacklist"); $spammer = true; } } } } } if (!$spammer) { //Fassim if (elgg_get_plugin_setting('use_fassim', 'spam_login_filter') == "yes") { $fassim_api_key = elgg_get_plugin_setting('fassim_api_key', 'spam_login_filter'); $fassim_check_email = elgg_get_plugin_setting('fassim_check_email', 'spam_login_filter'); $fassim_check_ip = elgg_get_plugin_setting('fassim_check_ip', 'spam_login_filter'); $fassim_block_proxies = elgg_get_plugin_setting('fassim_block_proxies', 'spam_login_filter'); $fassim_block_top_spamming_isps = elgg_get_plugin_setting('fassim_block_top_spamming_isps', 'spam_login_filter'); $fassim_block_top_spamming_domains = elgg_get_plugin_setting('fassim_block_top_spamming_domains', 'spam_login_filter'); $fassim_blocked_country_list = elgg_get_plugin_setting('fassim_blocked_country_list', 'spam_login_filter'); $fassim_blocked_region_list = elgg_get_plugin_setting('fassim_blocked_region_list', 'spam_login_filter'); if (!empty($fassim_api_key) && preg_match('/^[0-9a-z]{8}(-[0-9a-z]{4}){3}-[0-9a-z]{12}$/i', $fassim_api_key)) { $url = 'http://api.fassim.com/regcheck.php?apikey=' . $fassim_api_key . '&email=' . $register_email . "&ip=" . $register_ip . '&proxy=' . $fassim_block_proxies . '&topisp=' . $fassim_block_top_spamming_isps . '&topdm=' . $fassim_block_top_spamming_domains . '&cc=' . $fassim_blocked_country_list . '®ion=' . $fassim_blocked_region_list . '&hostForumVersion=ELGG'; $return = spam_login_filter_file_get_conditional_contents($url); if ($return != false) { $results = json_decode($return); if ($results != NULL) { if ($fassim_check_email == 1 && isset($results->email_status) && $results->email_status == true) { if (!$email_whitelisted) { register_error(elgg_echo('spam_login_filter:access_denied_mail_blacklist')); spam_login_filter_notify_admin($register_email, $register_ip, "Fassim e-mail blacklist"); $spammer = true; } } if ($fassim_check_ip == 1 && isset($results->ip_status) && $results->ip_status == true) { if (!$ip_whitelisted) { register_error(elgg_echo('spam_login_filter:access_denied_ip_blacklist')); spam_login_filter_notify_admin($register_email, $register_ip, "Fassim IP blacklist"); $spammer = true; } } if ($fassim_block_proxies == 1 && isset($results->proxy) && $results->proxy == true) { register_error(elgg_echo('spam_login_filter:access_denied_ip_blacklist')); spam_login_filter_notify_admin($register_email, $register_ip, "Fassim proxy blacklist"); $spammer = true; } if ($fassim_block_top_spamming_isps == 1 && isset($results->top_isp) && $results->top_isp == true) { register_error(elgg_echo('spam_login_filter:access_denied_ip_blacklist')); spam_login_filter_notify_admin($register_email, $register_ip, "Fassim top ISP blacklist"); $spammer = true; } if ($fassim_block_top_spamming_domains == 1 && isset($results->top_domain) && $results->top_domain == true) { register_error(elgg_echo('spam_login_filter:access_denied_domain_blacklist')); spam_login_filter_notify_admin($register_email, $register_ip, "Fassim top domains blacklist"); $spammer = true; } if (!empty($fassim_blocked_country_list) && isset($results->country_match) && $results->country_match == true) { register_error(elgg_echo('spam_login_filter:access_denied_country_blacklist')); spam_login_filter_notify_admin($register_email, $register_ip, "Fassim country blacklist"); $spammer = true; } if (!empty($fassim_blocked_region_list) && isset($results->region) && $results->region == true) { register_error(elgg_echo('spam_login_filter:access_denied_region_blacklist')); spam_login_filter_notify_admin($register_email, $register_ip, "Fassim region blacklist"); $spammer = true; } } } } } } return !$spammer; }
function spam_login_filter_login_event($event, $type, $user) { $check_login = elgg_get_plugin_setting('event_login', 'spam_login_filter'); if ($check_login != 'no') { // do it by default if (!spam_login_filter_check_spammer($user->email, spam_login_filter_get_ip(), true)) { register_error(elgg_echo('spam_login_filter:access_denied_mail_blacklist')); spam_login_filter_notify_admin($user->email, $register_ip, "Existing member identified as spammer has tried to login, check this account"); return false; } } // check user metadata for banned words/phrases $banned = spam_login_filter_get_banned_strings(); $metadata = spam_login_filter_get_user_metadata(); if ($banned && $metadata) { foreach ($metadata as $m) { foreach ($banned as $str) { if (strpos($user->{$m}, $str) !== false) { return false; } } } } }