Jump to content

[PHP] Imagem de segurança para formulário


REVISTAPHP
 Share

Recommended Posts

<?php
session_start();
$vogais = 'aeiou';
	// A variável $consoante recebendo valor
	$consoante = 'bcdfghjklmnpqrstvwxyzbcdfghjklmnpqrstvwxyz';
	// A variável $numeros recebendo valor
	$numeros = '1234567890';
        // A variável $resultado vazia no momento
	$resultado = '';

	// strlen conta o nº de caracteres da variável $vogais
	$a = strlen($vogais)-1;
	// strlen conta o nº de caracteres da variável $consoante
	$b = strlen($consoante)-1;
	// strlen conta o nº de caracteres da variável $numeros
	$c = strlen($numeros)-1;

 for($x=0;$x<=1;$x++)
	{	// A função rand() tem objetivo de gerar um valor aleatório
		$aux1 = rand(0,$a);
		$aux2 = rand(0,$b);
		$aux3 = rand(0,$c);
		// A função substr() tem objetivo de retornar parte da string
		// Caso queira números com mais digitos mude de 1 para 2 e teste
		$str1 = substr($consoante,$aux1,2);
		$str2 = substr($vogais,$aux2,2);
		$str3 = substr($numeros,$aux3,2);

		$resultado .= $str1.$str2.$str3;
		// Trim remove os espaços a direita e esquerda
		$resultado = trim($resultado);
	} // fecha o for

               // Recebe o valor gerado podenso ser senha ou numero de verifição
	$valorgerado = $resultado;


// Pegamos o valor gerado criamos um md5 32 caracteres e pegamos os 6 primeiros
$cod = strtoupper(substr(md5($valorgerado),0,6));

// Defininos nosso header
header("Content-Type: image/png");
// Defininos a largura da imagem
$xx = 70;
// Defininos a altura da imagem
$yy = 20;

$im = imagecreate($xx, $yy) or die('Image create error!');
$bgcolor = imagecolorallocate($im, 255, 255, 255);
$bordercolor = imagecolorallocate($im, 0, 0, 0);
$linecolor = imagecolorallocate($im, 200, 110, 255);
$fontcolor = imagecolorallocate($im, 0, 0, 0);
// Criamos linhas na imagem
for($x=7; $x < $xx-7; $x+=5) {
   imageline($im, $x+7, 0, $x-7, $yy-1, $linecolor);
   imageline($im, $x-7, 0, $x+7, $yy-1, $linecolor);
} // for
for($y=3; $y < $yy; $y+=3) imageline($im, 0, $y, $xx-1, $y, $linecolor);
// Escrevemos na imagem o conteúdo da variavel $cod
imagestring($im, 5, 8, 1, $cod, $fontcolor);
imageline($im, 0, 0, 0, $yy-1, $bordercolor);
imageline($im, 0, 0, $xx-1, 0, $bordercolor);
imageline($im, 0, $yy-1, $xx-1, $yy-1, $bordercolor);
imageline($im, $xx-1, 0, $xx-1, $yy-1, $bordercolor);

imagepng($im);
imagedestroy($im);
?>

jQuery Magazinewww.jquerymagazine.com.br-------------------------------Revista PHPwww.revistaphp.com.br

Link to comment
Share on other sites

Usei este código juntamente com um outro código que fazia a mesma coisa e um login criado por mim.

está tudo a funcionar, penso eu, a unica coisa mal é que a imagem nao aparece. (a imagem esta a ser bem criada).

Deve estar a faltar qualquer coisa, se alguem souber e quiser ajudar fica aqui o código:

register.php

<?php
session_start();

$_SESSION['image_code'] = strtolower(substr(md5(time()), 0, 6));

$errors = FALSE;

if (isset($_POST['submit'])) {
if(!$_POST['nick']){
	$errors = TRUE;
	echo "You need to introduce a nickname.";?><BR>
<?php
} 
elseif ($_POST['nick'][0] == ' ' | $_POST['nick'][strlen($_POST['nick'])-1] == ' '){
	$errors = TRUE;
	echo "Your nickname can't start or end with a space.";?><BR>
<?php
} 
else {
	$nick = strtolower($_POST['nick']);
}

if(!$_POST['pass']){
	$errors = TRUE;
	echo "You need to introduce a password.";?><BR>
<?php
} elseif(strtolower($_POST['pass']) != strtolower($_POST['cpass'])){
	$errors = TRUE;
	echo "The Confirm password isn't equal to the password.";?><BR>
<?php
} else {
	$pass = strtolower($_POST['pass']);
}

if(!$_POST['email']){
	$errors = TRUE;
	echo "You need to introduce an e-mail.";?><BR>
<?php
} elseif(strtolower($_POST['email']) != strtolower($_POST['cemail'])){
	$errors = TRUE;
	echo "The Confirm e-mail isn't equal to the e-mail.";?><BR>
<?php
} else {
	$email = strtolower($_POST['email']);
}

if(strtolower($_POST['image_code']) != $_SESSION['image_code']){
	$error = TRUE;
	$_SESSION['image_code'] = strtolower(substr(md5(time()), 0, 6));
	echo "Invalid securety code.";?><BR>
<?php
}
if($errors == FALSE){
	include "config.php";
	$bd_connection = mysql_connect(BD_SERVER, BD_ADMIN, BD_PASS) or die(mysql_error());
	mysql_select_db(BD_LOGIN) or die(mysql_error());

	$result = mysql_query("SELECT id FROM login WHERE nick = '$nick'") or die(mysql_error());
	$num_rows_result = mysql_num_rows($result);

	if ($num_rows_result != 0) {
		echo "$nick is already in use.";?><BR>
<?php
	} else {
		$result = mysql_query("SELECT id FROM login WHERE email = '$email'") or die(mysql_error());
		$num_rows_result = mysql_num_rows($result);

		if($num_rows_result != 0) {
			echo "$email is already in use.";?><BR>
<?php
		} else {
			$pass = md5($pass);
			$add_member = mysql_query("INSERT INTO login (nick, pass, email)
VALUES ('$nick', '$pass', '$email')");
			$code =  md5(uniqid( time() . $_SERVER['REMOTE_ADDR'] . rand(0, 9) ));
			$result = mysql_query("SELECT id FROM login WHERE nick = '$nick'") or die(mysql_error());
			$line = mysql_fetch_array($result);
			$id = $line['id'];
			mysql_query("INSERT INTO activation (id, code) VALUES ('$id', '$code')");	

			mysql_close($bd_connection);

			$email_mesage = '<p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">Bem-vindo ao SoccerPlayer!<p><p>
			Os seus dados são os seguintes:<p>
			Nickname: '.$nick.'<p>
			Password: '.$pass.'<p><strong>
			Código de activação: <a href="http://jarsantos.007ihost.com/activation.php?code='.$code.'">http://jarsantos.007ihost.com/activation.php?code='.$code.'</a></strong></p>
			<p>
			Tem uma semana para activar a sua conta.<p><p>
			Atenciosamente,<p>
			SoccerPlayer\'s Admins.';

			$headers  = "MIME-Version: 1.0\r\n";
			$headers .= "Content-type: text/html; charset=iso-8859-1\r\n";
			$headers .= "From: \"João Santos\" <jarsantos@gmail.com>\r\n";
			mail($email, "[soccerPlayer] Activação", $email_message, $headers);
			header("Location: login.php");
		}
	}
	mysql_close($bd_connection);
}
}
?>
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">
<table border="0">
<tr><td>Username:</td><td>
<input type="text" name="nick" maxlength="32">
</td></tr>
<tr><td>Password:</td><td>
<input type="password" name="pass" maxlength="10">
</td></tr>
<tr><td>Confirm Password:</td><td>
<input type="password" name="cpass" maxlength="10">
</td></tr>
<tr><td>E-mail:</td><td>
<input type="text" name="email" maxlength="64">
</td></tr>
<tr><td>Confirm E-mail:</td><td>
<input type="text" name="cemail" maxlength="64">
</td></tr>
<tr><th colspan=2><img src="img.php" /></th></tr>
<tr><th colspan=2><input type="text" name="image_code" maxlength="6" /></th></tr>
<tr><th colspan=2><input type="submit" name="submit" value="Register"></th></tr> </table>
</form>

image.php

<?php
session_start();

if ($_SESSION['image_code']) { 
$code = $_SESSION['image_code'];
header("Content-Type: image/png");

$width = 70;
$heigth = 20;

$image = imagecreate($width, $heigth) or die('Image create error!');

$bgcolor = imagecolorallocate($image, 255, 255, 255);
$bordercolor = imagecolorallocate($image, 0, 0, 0);
$linecolor = imagecolorallocate($image, 200, 110, 255);
$fontcolor = imagecolorallocate($image, 0, 0, 0);
// Criamos linhas na imagem
for($x=7; $x < $width-7; $x+=5) {
    imageline($image, $x+7, 0, $x-7, $heigth-1, $linecolor);
    imageline($image, $x-7, 0, $x+7, $heigth-1, $linecolor);
} // for
for($y=3; $y < $heigth; $y+=3) imageline($image, 0, $y, $width-1, $y, $linecolor);
// Escrevemos na imagem o conteúdo da variavel $cod
imagestring($image, 5, 8, 1, $code, $fontcolor);
imageline($image, 0, 0, 0, $heigth-1, $bordercolor);
imageline($image, 0, 0, $width-1, 0, $bordercolor);
imageline($image, 0, $heigth-1, $width-1, $heigth-1, $bordercolor);
imageline($image, $width-1, 0, $width-1, $heigth-1, $bordercolor);

imagepng($image);
imagedestroy($image);
}
?>

Já agora agradeço ao criador deste tópico porque ajudou-me bastante a perceber a lógica por trás da programação.

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.