Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

NuGuN

SMF Forum - Stop spam

Mensagens Recomendadas

NuGuN

Boas!

O título do tópico não engana... Vou partilhar uma forma de parar o spam nos forums SMF.

Tenho andado a preparar um fórum(smf) para um projecto pessoal e tenho tido alguns problemas com os bot's que mesmo utilizando captchas no registo de utilizadores, eles continuam a registar-se e a fazer o que de melhor sabem... spam!

Fiz umas pequisas na internet para tentar combater a "bicharada", mas o que encontrei não me convenceu muito...

Então a solução que encontrei foi alterar o formulário de registo adicionando um campo de registo obrigatório onde faz a pergunta "És Humano?" com a resposta obrigatória "sim".

Até agora tem resultado... não houve mais bot's a registarem-se. Apenas vejo nos logs as sua tentativas.

Antes de começarem as alterações convém fazerem um backup. Uma vez que não domino de todo o sistema em questão(smf), a forma como faço a alteração pode não ser a correcta. E também não consegui ainda que quando a resposta seja errada seja mostrada uma mensagem. Por este motivo é gerado um erro no log de erros do fórum que acaba por ajudar a perceber quando é que s bots fazem investidas.

Para começar, edita-se o template da página de registo - Themes/default/Register.template.php

Dentro desse ficheiro procurar por smf_autov_username que está dentro de um bloco <dd></dd>. Imediatamente a seguir a esse bloco colocar o seguinte:


<dt><strong><label for="smf_autov_human">', "É Humano? sim/nao", '</label></strong></dt>
<dd>
<input type="text" name="human_txt" id="smf_autov_human" size="30" tabindex="', $context['tabindex']++, '" maxlength="3" value="', isset($context['human']) ? $context['human'] : '', '" class="input_text" />
</dd>

E seguia editar o ficheiro - Sources/Register.php

Dentro da função Register.php, depois de terminar o ciclo if (!$verifiedOpenID) colocar o seguinte:


// Faz o check ao human
if ( ($_POST['human_txt'] != 'sim') ) {
$reg_errors[] = $txt['error_human'];
}

no final deverá ficar assim:

...
if (is_array($context['visual_verification']))
{
loadLanguage('Errors');
foreach ($context['visual_verification'] as $error)
$reg_errors[] = $txt['error_' . $error];
}
}
}

// Faz o check ao human
if ( ($_POST['human_txt'] != 'sim') ) {
	$reg_errors[] = $txt['error_human'];
}
...

De notar que o o parâmetro human_txt quando alterado deve se-lo nos dois ficheiros.

As alterações foram testadas apenas no theme default e na versão 2.0.3. Mas penso que não há problema em fazer a alteração para outras versões.

Cumps!

Editado por NuGuN
GeSHi

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
NuGuN

Eu andei a ver esse mas não gostei de algumas coisas como o facto de trabalhar através de listas, de emails denunciados o que apesar de reduzir em muito, não reduz totalmente e bloquear IP's que em certas situações há o risco de estar a bloquear IP's de potenciais utilizadores ditos "normais". Mas se isso que fiz não tivesse resultado teria instalado esse mod...

Cumps!

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.