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

zero-cool

Captcha

7 mensagens neste tópico

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,

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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,

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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 :)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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 ;)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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 :)

0

Partilhar esta mensagem


Link 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