예제 #1
0
파일: start.php 프로젝트: lorea/Hydra-dev
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 . '&region=' . $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;
}
예제 #2
0
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;
                }
            }
        }
    }
}