← Tutoriais

[PHP] Imagem de protecção anti-flood

Lida 3184 vezes

Offline

SSPT 
Membro
Mensagens 408 Gostos 0
Troféus totais: 26
Trófeus: (Ver todos)
Super Combination Combination Topic Starter Poll Voter Poll Starter Level 5 Level 4 Level 3 Level 2 Level 1

Boas,
Muitos ja devem ter visto imagens para proteger os nossos sites de bots.

Como funciona o sistema:
1º » Gerar 5 números de dois dígitos (entre 10 e 99 inclusive)
2º » Guardar os números gerados numa sessão
3º » Atribuír diferentes fontes aos 5 números como forma de evasão a bots mais 'evoluidos'
4º » Atribuír um ângulo a cada um dos 5 números também como forma de evasão a bots mais 'evoluidos'

Source
Código: [Seleccione]

<?php
//Em todas as paginas deveremos iniciar a sessão, caso contrario as variaveis serão perdidas
session_start&#40;&#41;;

srand&#40;&#40;double&#41;microtime&#40;&#41;*1234567&#41;;

// Iremos abrir um fundo personalizado, algo que ligue a imagem ao nosso site
$image imagecreatefromgif&#40;"fonts/1.gif"&#41;; 

//Definimos a cor do texto &#40;RGB&#41; de acordo com a imagem de fundo, neste caso usamos a cor preta
$textcolor imagecolorallocate&#40;$image,0,0,0&#41;;

// Definimos agora os 5 números e os respectivos tipos de letra
$font1 "fonts/Arial.ttf";
$text1 rand&#40;10, 99&#41;; // Here is our text
$font2 "fonts/comic.ttf";
$text2 rand&#40;10, 99&#41;;
$font3 "fonts/impact.ttf";
$text3 rand&#40;10, 99&#41;;
$font4 "fonts/verdana.ttf";
$text4 rand&#40;10, 99&#41;;
$font5 "fonts/Arial.ttf";
$text5 rand&#40;10, 99&#41;;

//Vamos juntar os 5 números para mais tarde comparar com os dados introduzidos no formulario
$_SESSION['number'&#93; = $text1 . $text2 . $text3 . $text4 . $text5;

//Vamos agora introduzir o texto, com diferentes fontes, posições e ângulos
imagettftext&#40;$image, 30, 20, 90, 55, $textcolor, $font1, $text1&#41;; 
imagettftext&#40;$image, 30, -10, 125, 55, $textcolor, $font2, $text2&#41;; 
imagettftext&#40;$image, 30, 10, 178, 55, $textcolor, $font3, $text3&#41;; 
imagettftext&#40;$image, 30, -5, 215, 55, $textcolor, $font4, $text4&#41;; 
imagettftext&#40;$image, 30, -8, 260, 55, $textcolor, $font5, $text5&#41;; 

//Como é um ficheiro php devemo definir que se trata de uma imagem definindo o cabeçalho
header&#40;"Content-type&#58; image/jpeg"&#41;;
//Mostramos a imagem
imagejpeg&#40;$image,'',90&#41;;
//Removemos os dados temporarios da memoria
imagedestroy&#40;$image&#41;;

?>



Na página do formulario devem colocar:
» campo para introdução dos 10 dígitos
» imagem gerada (<img src="img.php">)

Na página de verificação devem colocar:
» comparação entre o campo e o valor da imagem $_SESSION["number"]


NOTAS:
O php deve estar compilado com suporte GD e freetype
Deverão colocar as fontes e o fundo da imagem no directorio 'fonts'