Jump to content
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

zero-cool

Captcha

Recommended Posts

zero-cool

Viva,

Este código parou os "spammer bot" no meu site.

<?php
session_start();
$Tcod = array();
$vogais = 'aeiu';
$consoante = 'bcdfghjklmnpqrstvwxyz'; 
$numeros = '123456789'; 

$tudo = strtoupper($vogais).strtoupper($consoante).$numeros;

$resultado = ''; 

$a = strlen($vogais)-1; 
$b = strlen($consoante)-1; 
$c = strlen($numeros)-1; 

for($x=0;$x<=1;$x++) {
for ($i=0;$i<3;$i++) {
	$aux = rand(0,strlen($tudo)-1);
	$Tcod[] = $tudo{$aux};
	$resultado .= $tudo{$aux};
}
$resultado = trim($resultado);
}

$valorgerado = $resultado; 
$cod = strtoupper($valorgerado);

$_SESSION['codigo_valida'] = $cod;

header("Content-Type: image/png");

$xx = 70;
$yy = 20;

$im = imagecreate($xx, $yy) or die('Image create error!');

$bgcolor = imagecolorallocate($im, 238,239,239);
$bordercolor = imagecolorallocate($im, 208,208,208);
$linecolor = imagecolorallocate($im, 46,60,31);
$fontcolor = imagecolorallocate($im, 46,60,31);

imagecolorallocate($im,46,60,31);

for ($i = 0;$i<strlen($cod);$i++) {
imagestring($im, 5, $i*rand(10,11)+rand(5,8), $yy/5+rand(-3,3), $cod{$i}, $fontcolor);
}

for ($i = 0;$i<50;$i++) {
$xm = rand(0,$xx);
$ym = rand(0,$yy);
imageline($im, $xm,$ym,$xm,$ym,imagecolorallocate($im, 46,60,31));
}

imagepng($im);
imagedestroy($im);
?>

Cumprimentos,

Share this post


Link to post
Share on other sites
pedrosorio

Só para ter a certeza, podes dizer o site??

lol


Não respondo a dúvidas por mensagem.

Share this post


Link to post
Share on other sites
zero-cool

Só para ter a certeza, podes dizer o site??

Sim, era o turma21.info. No entanto o projecto "morreu" há meio ano, por isso já não está online. ;) O sistema de comentários era altamente atacado (cerca de 300 post's por dia de diferentes origens), e a partir do momento em que apliquei esse captcha passaram a não existir. :) Pode ser só coincidência, mas isso fica ao critério de cada um.. para mim foi o captcha (até porque continuaram a enviar mensagens mas com captchas errados, pois eu criei um log sobre isso)

Cumprimentos,

Share this post


Link to post
Share on other sites
softklin

Existem montes de captchas por aí. O porquê de parar os bots é simples: os bots de spammer "normais" não lêem textos de imagens (vá, falem lá do OCR ;)), por isso não passam a validação. logo é bastante credível que o spam tenha parado. No entanto, não se esqueçam que pode ser um entrave a pessoas com dificuldades na visão.

@zero-cool: falta a vogal 'o' no teu código. Agora que reparo, porque usas essas variáveis $vogais e $consoantes, se o que vais fazer no fim é juntá-las e nunca mais utilizá-las? Podias em $tudo ter colocado logo as letras todas maiúsculas e depois adicionar-lhe o números.

E depois o ciclo for($x=0;$x<=1;$x++) {  ? Isso só não corre uma vez? Visto que não alteras o $x dentro, podias remover essa referência.

Estes erros que te estou a indicar provavelmente foram de experiências que tenhas andado a fazer, podias aproveitar e caso uses este código em projectos teus actualmente, optimizá-lo um pouco :)


Nick antigo: softclean | Tens um projeto? | Wiki P@P

Ajuda a comunidade! Se encontrares algo de errado, usa a opção "Denunciar" por baixo de cada post.

Share this post


Link to post
Share on other sites
zero-cool

Existem montes de captchas por aí. O porquê de parar os bots é simples: os bots de spammer "normais" não lêem textos de imagens (vá, falem lá do OCR :P ), por isso não passam a validação. logo é bastante credível que o spam tenha parado. No entanto, não se esqueçam que pode ser um entrave a pessoas com dificuldades na visão.

Sim, eu sei disso. E antes também utilizava uma validação por imagem que era quebrada por OCR :)

@zero-cool: falta a vogal 'o' no teu código. Agora que reparo, porque usas essas variáveis $vogais e $consoantes, se o que vais fazer no fim é juntá-las e nunca mais utilizá-las? Podias em $tudo ter colocado logo as letras todas maiúsculas e depois adicionar-lhe o números.

E depois o ciclo for($x=0;$x<=1;$x++) {  ? Isso só não corre uma vez? Visto que não alteras o $x dentro, podias remover essa referência.

Estes erros que te estou a indicar provavelmente foram de experiências que tenhas andado a fazer, podias aproveitar e caso uses este código em projectos teus actualmente, optimizá-lo um pouco ;)

Esse ciclo foi aí parar.. nem me apercebi dele, vestigios de fazes intermédias sem dúvida :) Em relação ao "o", é para não se confundir com 0 (zero)... Daí recorrer a maiúsculas, onde é mais intuitivo usar 0 (zero) em vez de "o" (na minha perspectiva).

Quando tiver um tempinho vou melhorar isto. Tenho aqui umas ideias com tipos de letra diferentes, cores, tamanhos, etc.. só preciso de tempo para a desenvolver.

Obrigado pelos conselhos ;)

Share this post


Link to post
Share on other sites
softklin

Em relação ao "o", é para não se confundir com 0 (zero)... Daí recorrer a maiúsculas, onde é mais intuitivo usar 0 (zero) em vez de "o" (na minha perspectiva).

Bem visto :)


Nick antigo: softclean | Tens um projeto? | Wiki P@P

Ajuda a comunidade! Se encontrares algo de errado, usa a opção "Denunciar" por baixo de cada post.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.