PHP: Gerando imagem de segurança

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.


One Comment on “PHP: Gerando imagem de segurança”

  1. Daniel José disse:

    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 uma resposta

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s