0

Captcha - protegendo formulários contra ataques automatizados

criado por Ricardo Maia em 04/04/2006 7:04pm
Esta é a página que contêm o formulário e é onde a imagem será exibida. Ao executar seu projeto abra esta página no browser.

Seguindo a didática do comentário no fonte...

(form.php)
<?php
session_start();

// evitando que ao se utilizar o botão voltar do navegador seja apresentada uma imagem já exibida!
// >>>>> início da prevenção de cache.
header("Cache-Control: no-cache, no-store, must-revalidate"); 
header("Expires: Sun, 01 Jan 1995 00:00:00 GMT");

if (isset($_SESSION['formulario_enviado']) && $_SESSION['formulario_enviado'] == TRUE){
  	$_SESSION['formulario_enviado'] = FALSE;
  	header("refresh:0; url=form.php");
}
// <<<<<< fim da prevenção de cache.

//incluindo o arquivo que contém a função captcha
include("captcha.php");

// >>>>> início da prevenção de hacking do formulário.

$token = md5(uniqid(rand(), TRUE)); 

$_SESSION['token'] = $token;  
$_SESSION['hora_token'] = time();
$_SESSION['texto_captcha'] = captcha ("imagem","enigma2.ttf");

/*OBS:
A fonte deve estar no mesmo diretório que a página php.
O diretório deve ter permissão de escrita pois o php irá criar uma imagem em tempo de execução.
Requer as bibliotecas GD e FreeType.
*/

// <<<<<< fim da prevenção de hacking do formulário.
?>
<html>
<head><title>Captcha</title></head>

<style>
<!--
/*
Definições de estilo para apresentação da página.
*/
	body{
		font-family:Geneva, Arial, Helvetica, sans-serif;
		font-size:12px;
	}
	#imagem_captcha{
		border-style:dashed;
		border-width:1px;
		border-color:#CCCCCC;
	}
	
	#cod_confirmacao{
		border-style:solid;
		border-width:1px;
		border-color:#333333;
		font-family:Verdana, Arial, Helvetica, sans-serif;
		font-size:12px;
		width:200px;
	}
	
	#btn_submit{
		border-style:groove;
		border-width:2px;
		border-color:#333333;
		font-family:Verdana, Arial, Helvetica, sans-serif;
		font-size:12px;
		width:80px;
	}
	
	#btn_submit:hover{
		border-style:ridge;
	}
-->
</style>

<body onLoad="document.getElementById('cod_confirmacao').focus();">

<form action="processa.php" method="post" autocomplete="off">
	Informe os caracteres da imagem:<br>
	<img id="imagem_captcha" src="imagem.png" border="1"><br>
	<input id="cod_confirmacao"  name="cod_confirmacao" type="text" size="10" maxlength="5" value=""><br>
	<input id="btn_submit" type="submit" value="Enviar">
	<input type="hidden" name="token" value="<?php echo $token; ?>">
</form>

</body>
</html>

Comentários:

Nenhum comentário foi enviado ainda.

Novo Comentário:

(Você pode usar tags como <b>, <i> ou <code>. URLs serão convertidas para links automaticamente.)