Um problema recorrente de quem possui sites ou fóruns bbPress que aceitam registro de membros é o cadastro de spammers. Quase sempre eles utilizam o mesmo domínio de e-mail para criar as contas falsas. É por isso que neste artigo vou ensinar como bloquear um domínio de e-mail no registro de membros.
A utilização do mesmo domínio para a realização dos cadastros falsos no WordPress ocorre por um motivo simples: o spammer precisa ter controle do serviço de e-mail para conseguir ler os e-mails que contém o código de ativação e senha que são enviados após o cadastro do usuário no site.
Neste tipo de situação, onde é exigido um código de confirmação ou a senha é enviada por e-mail, o spammers obrigatoriamente vão precisar criar seu próprio serviço de e-mail para que os scripts automatizados consigam acessar o código de ativação da conta.
Os spammers somente utilizam serviços populares como Gmail para enviar spam nos comentários quando não é preciso receber nenhum link de confirmação ou senha por e-mail. Neste caso eles simplesmente geram nomes de e-mails aleatórios de domínios populares como Gmail, Outlook e etc.
Como bloquear determinados domínios de e-mails no registro de membros
Para bloquear um determinado domínio usado para se registrar em seu site ou fórum basta adicionar o seguinte código no arquivo functions.php do tema usado por seu site WordPress:
function block_domains_in_registration($errors, $sanitized_user_login, $user_email){
$invalid_domains = [
'*.ru', //Bloqueia todos os e-mails terminados com ".ru" (By Russia).
'*.ch', //Bloqueia todos os e-mails terminados com ".ch" (By China).
'spambog.*', //Bloqueia todos os e-mails do domínio spambog ( exemplo spambog.com, spambog.de, spambog.ru... )
'gmaile.design',
'ersatzauto.ch',
'tempes.gq',
'cpmail.life',
'happyfreshdrink.com',
'brandly.tech',
];
$email = explode('@',$user_email);
foreach ( $invalid_domains as $domain_blacklisted ) {
$domain_blacklisted = preg_replace('/\\\\\*/','(.*)', preg_quote($domain_blacklisted)); // Escapa caracteres especiais e substitui o *
if ( isset( $email[1] ) && preg_match("/^{$domain_blacklisted}$/", $email[1])) {
$errors->add('spammer', '<strong>ERRO FATAL</strong>: Serviço de e-mail informado foi bloqueado pelos administradores do site!');
break;
}
}
return $errors;
}
add_filter('registration_errors', 'block_domains_in_registration', 10, 3);
No exemplo acima eu bloqueio e-mails terminados com a extensão “.ru”, “.ch”, além de bloquear também alguns domínios conhecidos por praticar spam, mas é importante que você adicione ou remova domínios conforme a sua necessidade.
À medida novos domínios são usados para a criação de contas falsas você pode bloqueá-los com o código acima. Importante realizar esse bloqueio porque os spammers são extremamente “insistentes”, visto que eles utilizam scripts automatizados que podem gerar dezenas de cadastros falsos em seu site.
Caso queira saber mais sobre a função utilizada no código acima poderá verificar a documentação oficial do Codex.
Bloqueio de domínios de e-mails através de plugin
Para quem deseja uma solução mais fácil que não dependa de código para ser implementada pode recorrer ao plugin Ban Hammer para WordPress. Com ele é possível cadastrar domínios de e-mails que são bloqueados no momento de criar uma conta em seu site ou fórum.
O Ban Hammer tem a vantagem de não precisar de nenhuma linha de código para ser implementado e também é extremamente confiável e quase não consome recursos do servidor.
Para isso basta realizar a instalação do plugin Ban Hammer e inserir a lista de domínios a serem bloqueados na página de configuração do plugin.