PHP: Gerando imagem de segurança

14 07 2008

A imagem de segurança é um recurso muito útil para evitar que robôs executem tarefas repetitivas eu seus formulários de cadastro, sistemas de votação ou coisas do tipo.

Vale ressaltar que este exemplo que criei tem fins didáticos e para ser usado profissionalmente devera ser melhorado. A idéia aqui é simplesmente explicar como funciona o mecanismo.

Para que este recurso funcione corretamente, você precisa ter a biblioteca GD instalada no servidor. Você encontrará mais informações sobre esta biblioteca em http://www.php.net/manual/pt_BR/ref.image.php

Para simplificar o exemplo eu deixei o código PHP na própria índex e separei somente o código que gera a imagem, ai você crie e organize suas funções com lhe convir.

Veja um exemplo ou se preferir baixe o código aqui.

Vamos a índex. Nesta pagina temos:
1- O script que compara os códigos.
2- O script que gera o código e armazena na variável de sessão.
3- O codigo HTML.
session_start();
/*script para comparar o codigo digitado com o codigo da imagem*/
if($_POST[cmdEnviar]){
$confirmacao = $_POST['confirmacao'];
$cod_seguranca = $_SESSION['cod_seguranca'];
if (strtolower($confirmacao) == strtolower($cod_seguranca)) {
$msg = "Codigo de seguranca CORRETO!";
}
else {
$msg = "Codigo de seguranca INVALIDO!";
}
}
/*inicializa o contador*/
$i = 0;
/*gera uma sequencia de 6 numeros aleatorios*/
while( $i<6 ){
/*gera um caracter randomico entre a faixa de numeros indicada*/
$num = rand(48,122);
/*Se o numero gerado estiver entre as faixas definidas abaixo, o caracter eh aceito
(Numeros de 1 a 9) ou (letras de A-Z) ou (letras de a-z)*/
if( (49<$num && $num<58 )||( 64<$num && $num<91 )||( 97<$num && $num<122 ))
{
/*armazena os caracteres validos*/
$str .= "chr($num)";//retire as aspas desta funcao
$i++;
}
}
/*grava os carac. velidos na em uma sessao para comparar aos carac. digitados pelo usuario*/
$_SESSION["cod_seguranca"] = $str;

No arquivo imagemgd.php esta o codigo que gera a imagem:

session_start();
/*Define o cabecalho com o tipo de arquivo que sera gerado*/
header("Content-type: image/png");
/*selecionando uma imagem para o fundo*/
$background = imagecreatefrompng("bg.png");
/*cria uma nova imagem que recebera a imagem original*/
$thumb = imagecreatetruecolor(150, 44);
/*copia a original mantendo sua proporcao*/
imagecopyresampled($thumb,$background,0,0,0,0,150,44,150,44);
/*selecionando uma fonte para usar na imagem*/
$fonte = "VINERITC.ttf";
/*alocando uma cor para a fonte*/
$font_color = imagecolorallocate($thumb,255,255,255);
/*escreve o texto nova imagem*/
imagettftext($thumb,22,5,10,35,$font_color,$fonte,$_SESSION['cod_seguranca']);//
/*gera uma saida de aconrdo com o cabecalho definido*/
imagepng($thumb);
/*retira imagem da memoria*/
imagedestroy($thumb);

Para tornar este recurso mais interesante, use varias imagens e fontes com formatos e tamanhos diferentes.


Ações

Informações

Uma resposta

28 10 2008
Daniel José

Olá
Muito bom seus scripts. Utilizo sempre em meus projetos.
Gostaria de colocar um link do seu blog em meu site, se tiver interesse, entre em contato.
Abraço

Deixe um comentário