26.Mar.2007
Publicado por MijT en PHP y MySQL | 6182 Lecturas | 10 comentarios
Muchas veces cuando creamos un sitio web, blog o foro lo que nunca falta son los famosos formularios de contacto con el webmaster o administrador del site y el gran problema que nos lleva una aplicación de este tipo son los molestosos mensajes de spam que nos llegan al correo, en su mayoría enviados desde robots de spam valga la redundancia, una de las soluciones más efectivas a este incómodo hecho es utilizar un sistema denominado CAPTCHA.
Lo que explicaré a continuación es la creación de un script -usando PHP claro está- que cree un código aleatorio alfanumérico y lo escriba en una imagen para la cual usaremos la librería GD de PHP. Pero antes de empezar vamos a definir lo que es en sí el sistema CAPTCHA.
Definido lo que es el sistema CAPTCHA vamos al script en si y a su utilización, quiero dejar claro que este script no es propio, sólo lo he modificado para utilizarlo en este tipo de formularios(contacto al admin, libros de visita, comentarios, etc.).
Lo primero que haremos será crear el script que genere el código aleatorio y lo añada a una imagen que también crearemos usando como dije líneas arriba la librería gráfica GD de PHP.
A este archivo lo podemos llamar captcha.php
Tal como lo ven estamos haciendo uso de las funciones para tratamiento de imágenes propias de PHP, las mismas que ustedes mismos pueden encontrar en el Manual Oficial de PHP
Ahora bien, ya tenemos creada la imagen con el código aleatorio, lo que sigue será crear nuestro formulario y en él insertaremos la imagen que hemos creado con su respectiva validación para que los datos sean enviados correctamente al email.
A este archivo podemos llamarlo contacto.php
Como se darán cuenta este último script lo que hace es mostrar el formulario con los campos solicitados además de la imagen CAPTCHA generada en el primer script, la cual hemos insertado usando la etiqueta xhtml <img /> la que nos devolverá el contenido binario de la imagen generada.
Una vez que se hayan enviado los datos lo primero que se hará será validar uno a uno los datos ingresados incluido el código del CAPTCHA para definir si lo que ingresó el usuario es el mismo que el que aparece en la imagen generada.
Listo, ya tenemos el formulario de contacto con el código CAPTCHA, ahora todo aquel usuario que quiera contactar con el webmaster o administrador deberá ingresar correctamente los datos para poder enviar correctamente el correo.
Lo que explicaré a continuación es la creación de un script -usando PHP claro está- que cree un código aleatorio alfanumérico y lo escriba en una imagen para la cual usaremos la librería GD de PHP. Pero antes de empezar vamos a definir lo que es en sí el sistema CAPTCHA.
Cita:
Captcha es el acrónimo de Completely Automated Public Turing test to tell Computers and Humans Apart (Prueba de Turing pública y automática para diferenciar a máquinas y humanos).
La típica prueba consiste en que el usuario introduzca un conjunto de caracteres que se muestran en una imagen distorsionada que aparece en pantalla. Se supone que una máquina no es capaz de comprender e introducir la secuencia de forma correcta por lo que solamente el humano podría hacerlo (salvo error).
Captcha es el acrónimo de Completely Automated Public Turing test to tell Computers and Humans Apart (Prueba de Turing pública y automática para diferenciar a máquinas y humanos).
La típica prueba consiste en que el usuario introduzca un conjunto de caracteres que se muestran en una imagen distorsionada que aparece en pantalla. Se supone que una máquina no es capaz de comprender e introducir la secuencia de forma correcta por lo que solamente el humano podría hacerlo (salvo error).
Definido lo que es el sistema CAPTCHA vamos al script en si y a su utilización, quiero dejar claro que este script no es propio, sólo lo he modificado para utilizarlo en este tipo de formularios(contacto al admin, libros de visita, comentarios, etc.).
Lo primero que haremos será crear el script que genere el código aleatorio y lo añada a una imagen que también crearemos usando como dije líneas arriba la librería gráfica GD de PHP.
A este archivo lo podemos llamar captcha.php
<?php
session_start();
// Genero el codigo y lo guardo en la sesión para consultarlo luego.
$captchaCode = substr(sha1(microtime() * mktime()), 0, 6);
$_SESSION['CAPTCHA_CODE'] = sha1($captchaCode);
// Genero la imagen
$img = imagecreatetruecolor(70, 25);
// Colores
$bgColor = imagecolorallocate($img, 230, 230, 230);
$stringColor = imagecolorallocate($img, 90, 90, 90);
$lineColor = imagecolorallocate($img, 245, 245, 245);
// Fondo
imagefill($img, 0, 0, $bgColor);
imageline($img, 0, 5, 70, 5, $lineColor);
imageline($img, 0, 10, 70, 10, $lineColor);
imageline($img, 0, 15, 70, 15, $lineColor);
imageline($img, 0, 20, 70, 20, $lineColor);
imageline($img, 12, 0, 12, 25, $lineColor);
imageline($img, 24, 0, 24, 25, $lineColor);
imageline($img, 36, 0, 36, 25, $lineColor);
imageline($img, 48, 0, 48, 25, $lineColor);
imageline($img, 60, 0, 60, 25, $lineColor);
// Escribo el código
imageString($img, 5, 8, 5, $captchaCode, $stringColor);
// Image output.
header("Content-type: image/png");
imagepng($img);
?>
Tal como lo ven estamos haciendo uso de las funciones para tratamiento de imágenes propias de PHP, las mismas que ustedes mismos pueden encontrar en el Manual Oficial de PHP
Ahora bien, ya tenemos creada la imagen con el código aleatorio, lo que sigue será crear nuestro formulario y en él insertaremos la imagen que hemos creado con su respectiva validación para que los datos sean enviados correctamente al email.
A este archivo podemos llamarlo contacto.php
<?php
session_start();
if(isset($_POST['enviar'])) {
$Message = "";
$Captcha = (string) $_POST["CAPTCHA_CODE"];
if($_POST['nombre'] == '') {
echo "<p style='color: #ff0000;'><strong>No has ingresado tu Nombre.</strong></p>";
}elseif($_POST['email'] == '') {
echo "<p style='color: #ff0000;'><strong>No has ingresado tu Email.</strong></p>";
}elseif($_POST['asunto'] == '') {
echo "<p style='color: #ff0000;'><strong>No has ingresado el Asunto del mensaje.</strong></p>";
}elseif($_POST['mensaje'] == '') {
echo "<p style='color: #ff0000;'><strong>No has ingresado el Mensaje.</strong></p>";
}elseif(sha1($Captcha) != $_SESSION["CAPTCHA_CODE"]) {
$Message = "<p style='color: #ff0000;'><strong>El código de validación no ha sido ingresado o es incorrecto.</strong></p>";
}else {
mail ("tu_correo@tudominio.com", "$asunto", "$mensaje", "From: $nombre <$email>"); // coloque aqui su correo
echo '<p style="color: #63A915;"><strong>El email ha sido enviado con éxito.</strong></p>';
}
}
if(!empty($Message)) {
// Muestro los posibles errores de validación previos.
echo "$Message";
}
// Si aún no se han enviado los datos, mostramos el formulario
?>
<form method="post" action="contacto.php">
<label>Nombre / Nick:</label>
<input type="text" name="nombre" />
<label>Email:</label>
<input name="email" type="text" size="45" />
<label>Asunto:</label>
<input name="asunto" type="text" size="60" />
<label>Mensaje:</label>
<textarea name="mensaje" cols="80" rows="10"></textarea>
<label>Código de seguridad:</label>
<img src="captcha.php" /><input type="text" name="CAPTCHA_CODE" style="width: 50px;" />
<p style="padding-top: 5px;">
<input type="submit" name="enviar" value="Enviar Mensaje" />
<input type="reset" name="enviar" value="Borrar datos" />
</p>
</form>
Como se darán cuenta este último script lo que hace es mostrar el formulario con los campos solicitados además de la imagen CAPTCHA generada en el primer script, la cual hemos insertado usando la etiqueta xhtml <img /> la que nos devolverá el contenido binario de la imagen generada.
Una vez que se hayan enviado los datos lo primero que se hará será validar uno a uno los datos ingresados incluido el código del CAPTCHA para definir si lo que ingresó el usuario es el mismo que el que aparece en la imagen generada.
Listo, ya tenemos el formulario de contacto con el código CAPTCHA, ahora todo aquel usuario que quiera contactar con el webmaster o administrador deberá ingresar correctamente los datos para poder enviar correctamente el correo.
Enlaces relacionados
El 6 de Jun. del 2008 a las 08:42
Me gustaría saber si en el script de CAPTCHA que amablemente ofreces es posible cambiar estos tres parámetros:
- Tipo de fuente (para colocar alguna de diferencie las O mayúsculas de los ceros)
_ Tamaño de la fuente (para poder usar uno mayor)
_ Caracteres sobre los que se hará la selección aleatoria (sólo mayúsculas o minúsculas, etc.)
Saludos
El 3 de Jun. del 2008 a las 13:32
Muy bueno el formulario, solo me queda una duda. En los anteriores formularios que yo usaba al enviar el correo salia un mensaje que decia que habia sido enviado exitosamente en otra pagina (por ejemplo correo.php). Aqui el mensaje vuelve a aparecer en la misma pagina llamada contacto.php. Esto no me sirve mucho ya que si el mensaje fue enviado posiblemente la gente desee seguir navegando por otros sitios.
Alguien sabe como hacer que al enviar el mensaje correctamente salte a otra pagina y no vuelva a contacto.php
Muchas Gracias
El 26 de Mayo del 2008 a las 13:46
Piromanos facilita un nuevo captcha seguro... jejej no tiene desperdicio. La idea es combinar los captchas visuales con las preguntas logicas... y el resultado es... http://piromanos.com/2008/05/26/piromanos-presenta-el-captcha-mas-seguro-del-mundo/
El 7 de Ago. del 2007 a las 14:05
Hola amigos.
He hecho lo que dices en un directorio que tengo y creo que esta todo bien.
Lo que no se es como hacer para que ese campo sea obligatorio
Ya que relleno el formulario y aunque deje vacia la casilla del captcha se envia el formulario.
Haber si me podeis echar una mano?
Ya que no se mucho de php(mas bien muy poco)
Gracias por vuestra ayuda.
Esta es la direccion del formulario por si hos hace falta.
http://www.rinconmaster.com/directorio/add.php?sid=0
El 31 de Jul. del 2007 a las 15:11
Cita:
Notice: Undefined variable: enviar in /web/htdocs/www.peondedama.com/home/modulos/contacto.php on line 3
Notice: Undefined variable: enviar in /web/htdocs/www.peondedama.com/home/modulos/contacto.php on line 3
veamos, al parecer el notice es debido a que no le pusiste el nombre "enviar" al control submit de tu formulario o le has puesto otro diferente,de no ser ese el caso, prueba, cambiando esta línea.
<?php
if($enviar) { // cambias esto
?>
por esta otra
<?php
if(isset($_POST['enviar'])) { // por esta otra
?>
Con ello debería de funcionarte bien y no mostrarte el notice, pruébalo y me cuentas que tal te fue.
Saludos.
PD.: Edito el script para cambiar yo también esa línea.
El 27 de Jul. del 2007 a las 20:24
Hola
Ejecuto el script en esta forma http://www.mipaginaweb.com/?mod=contacto, lo hago así porque mi web es modular y paso las paginas como si fueran variables, lógicamente en el archivo contacto.php en el campo <form method="post" action="?mod=contacto"> lo pongo igual, ya que se debe respetar el nombre identico del formulario.
El form con el captcha funcionan a la primera, pero obtengo el siguiente notice de PHP:
Notice: Undefined variable: enviar in /web/htdocs/www.peondedama.com/home/modulos/contacto.php on line 3
A ver si algún experto que lea el coment, me da alguna pista, yo creo que ya que el form va bien en todos los aspectos, debe de ser una chorrada en las variables, pero llevo algún tiempo intentado quitar el notice y no hay manera.
Gracias anticipadas tanto si lo resuelvo como si no.
Manel
El 9 de Abr. del 2007 a las 08:08
Creo que fui claro al decir CREO que fue de desarrolloweb.com. en ningún momento he afirmado que ahí lo cogí y no fue en dicha web, tal vez fue error mio no poner la dirección en ese momento, la encontré en google le di clic vi el código que generaba la imagen y lo copié para trabajarlo en ese tipo de formularios, veo que me has agarrado manía desde el día que te respondí aquello del partido de Cienciano con Boca Juniors.
Tampoco quiero discutir, así que espero que esto quede allí.
Saludos.
El 9 de Abr. del 2007 a las 05:39
MijT:
Hazte el loco, no estoy aqui para discutir contigo, pero solo creo que deberias de dejar los creditos del autor de donde sacaste el script, informacion o simplemente la idea... Yo no soy autor del script pero fui yo el que te hablo sobre la seguridad en tus formularios de contacto o no?
Ya busque en desarrolloweb y no veo ninguna parte donde este el script que haz puesto. No tengo nada encontra de ti, solo creo que tienes que darle credito a quien se merece.
El 8 de Abr. del 2007 a las 22:20
A ver, me parece o no sé pero creo que sólo entraste y leiste el script y no la descripción del mismo donde pongo cláramente que NO lo hice yo, que sólo lo he modificado para que se pueda usar en un formulario de correo.
Cita:
Definido lo que es el sistema CAPTCHA vamos al script en si y a su utilización, quiero dejar claro que este script no es propio, sólo lo he modificado para utilizarlo en este tipo de formularios(contacto al admin, libros de visita, comentarios, etc.).
Definido lo que es el sistema CAPTCHA vamos al script en si y a su utilización, quiero dejar claro que este script no es propio, sólo lo he modificado para utilizarlo en este tipo de formularios(contacto al admin, libros de visita, comentarios, etc.).
Otra cosa, esa dirección que pusiste no es la dirección donde encontré dicho script. Ahora no recuerdo bien de donde lo saqué, creo que fue de desarrolloweb.com, en fin
El 8 de Abr. del 2007 a las 22:07
Muy bueno... pero te falto algo ;) dejar los creditos al autor:
http://www.webcheatsheet.com/php/create_captcha_protection.php
Guía BBCode
Comentar este artículo
PRONTO EN CANALPERU
Si deseas saber más, entra a CanalPeru.NET
BÚSQUEDAS
GALERÍA
|
|
|
|
|
|
|
|
|
|
SÍGUEME EN TWITTER
Cuando un geek muere, su tumba -obviamente- se debe diferenciar de las otras http://www.rarurl.com/tumbageek xD
@TheGhost 2 semanas desconectado del mundo y me vuelvo a enfermar, creo que el internet me afecta, habrá "Kaspersky" en pastillas? xD
Por enésima vez... agripado!!!
Firefox 3... un desastre!! http://rarurl.com/jEYIwL
Nuestra bandera ya está en 1er lugar, a seguir votando!! http://www.rarurl.com/9UOzz
que rico estuvo el estofado!
@TheGhost amén
@TheGhost admiro tu fé en esa tira de inútiles xD
Nace RarURL, otra alternativa para comprimir URLs extensas http://www.rarurl.com/q0GQ
TwitterCounter, cuántos te siguen en Twitter http://www.rarurl.com/ZwU6Lh
CATEGORÍAS
- Actualidad (11)
- AJAX (0)
- CelulaWeb.NET (7)
- Cine y TV (40)
- CSS (2)
- Deportes (63)
- Descargas (16)
- Diseño (7)
- Eventos (7)
- Gadgets (75)
- Informática (105)
- Internet (173)
- Juegos y Consolas (19)
- Multimedia (2)
- Música (22)
- Off Topic (29)
- PHP y MySQL (6)
- Seguridad (37)
- Software Libre (19)
- XHTML (1)
BLOGROLL
ENCUESTAS
¿Quién crees que fue o es el "Rey del Rock" a nivel mundial?
VIDEO MÁS VISTO EN CANALPERÚ
- Título: Telekinesis
- Álbum: Soda Stereo
- Intérprete: Soda Stereo
- 2616 visitas | 0 comentarios
- 98 votos recibidos | 912 puntos























