Foro de elhacker.net

Programación => PHP => Mensaje iniciado por: jcroot en 3 Abril 2007, 21:09 pm



Título: Duda con un script de envio en PHP
Publicado por: jcroot en 3 Abril 2007, 21:09 pm
Hola!

En primer lugar gracias que ElHacker.Net volvió! Ya se le extrañaba.

Amigos vengo con una duda, trate de hacerlo solo pero no pude, tengo una duda sobre un script en PHP que encontré en la Internet el cual se encarga de enviar los datos de un formulario al e-mail.

Este es el script original:

Código:
<?php 

// aki tu e-mail

$recipiente = "fulanito@dominio.com";


// URL o enlace a la pagina hogar

$home = "http://google.com";


// mensaje k te llegara al email con los datos

$msg = "Hola $nombre

$nombre, envia el formulario de contacto con los siguientes datos:\n

Nombre: $nombre
E-mail: $email
Pagina de internet: $web 

Asunto: $asunto

Mensaje del visitante:

$mensaje\n\n";

// Comprobamos que los campos del formulario se encuentren completos.

if (empty($nombre)||empty($email)||empty($asunto)||empty($mensaje)){
echo 'No llenaste las casillas';

} else{

// Enviamos el formulario con todos los datos.

mail("$recipiente", "$asunto", "$msg", "From: $nombre");

//Damos las gracias al visitante por contactarnos.

echo"<font face=tahoma size=2>
<p align=center>Gracias <b>$nombre</b>. 
<p align=center>Respondere a su mensaje en un plazo de 12 horas.<br><br>
<br>
<p align=center><br>
<strong><a href=$home>Regresar al inicio</strong></a>.</p>";
}
?>

El problema con este script es que no evita los ataques anti flood, ya que le pase la dirección de mi formulario de contacto a un amigo y me envio 200 emails en 1 hora por medio del mismo.

Buscando en la Internet encontré esta web:

http://www.webcheatsheet.com/php/create_captcha_protection.php

La cual explica muy bien como agregar un código de verificación a cualquier formulario para evitar los Floods pero no lo entendí muy bien. Si quieres visiten esa web para que lo entiendan
mejor, el caso es que tengo los siguientes archivos:

Contacto.html  - este es mi formulario de contacto en HTML

Enviado.php - este es el script que les puse anteriormente,  el cual envía los datos al email

Create_image.php  –   este se encarga de crear la imagen en PHP (el código de confirmación).

ajax_captcha.js  -  un código en java script que tiene que ver con create_image.php, este archivo lo tengo que incluir en mi formulario de contacto con un: 

Código:
<script language="javascript" type="text/javascript" src="ajax_captcha.js"></script>

Vamos bien… Los ejemplos de la web me dio otro archivo llamado: captcha.php el cual verifica que campo del formulario (el campo del código de verificación) no este vacio y que corresponda con la imagen que se guardo para poder enviarse.
Capcha.php contiene el siguiente código:

Código:
<?


//Continue the session
session_start();

//Make sure that the input come from a posted form. Otherwise quit immediately
if ($_SERVER["REQUEST_METHOD"] <> "POST")
 die("You can only reach this page by posting from the html form");

//Check if the securidy code and the session value are not blank
//and if the input text matches the stored text
if ( ($_REQUEST["txtCaptcha"] == $_SESSION["security_code"]) &&
    (!empty($_REQUEST["txtCaptcha"]) && !empty($_SESSION["security_code"])) ) {
  echo "<h1>Test successful!</h1>";
} else {
  echo "<h1>Test failed! Try again!</h1>";
}
?>

Ahora, yo pensé que podía agregarle el contenido de captcha.php a mi archivo con el script enviado.php pero algo salió mal… no puedo hacer funcionar el script enviado.php si agrego el otro (captcha.php)

Esto es lo que tengo en enviado.php hasta el momento:

Citar
<?php

//Continue the session
session_start();

//Make sure that the input come from a posted form. Otherwise quit immediately
if ($_SERVER["REQUEST_METHOD"] <> "POST")
 die("You can only reach this page by posting from the html form");


// aki tu e-mail

$recipiente = "fulanito@dominio.com";


// URL o enlace a la pagina hogar

$home = "http://google.com";


// mensaje k te llegara al email con los datos

$msg = "Hola $nombre

$nombre, envia el formulario de contacto con los siguientes datos:\n

Nombre: $nombre
E-mail: $email
Pagina de internet: $web 

Asunto: $asunto

Mensaje del visitante:

$mensaje\n\n";

// Comprobamos que los campos del formulario se encuentren completos.

if (empty($nombre)||empty($email)||empty($asunto)||empty($mensaje)){
echo 'No llenaste las casillas';

} else{

//Check if the securidy code and the session value are not blank
//and if the input text matches the stored text
if ( ($_REQUEST["txtCaptcha"] == $_SESSION["security_code"]) &&
    (!empty($_REQUEST["txtCaptcha"]) && !empty($_SESSION["security_code"])) ) {
  echo "<h1>Test successful!</h1>";
} else {
  echo "<h1>Test failed! Try again!</h1>";
}


// Enviamos el formulario con todos los datos.

mail("$recipiente", "$asunto", "$msg", "From: $nombre");

//Damos las gracias al visitante por contactarnos.

echo"<font face=tahoma size=2>
<p align=center>Gracias <b>$nombre</b>. 
<p align=center>Su mensaje fue enviado con <b>&#38;#161;exito!...</b>
<p align=center>Respondere a su mensaje en un plazo de 12 horas.<br><br>
<br>
<p align=center><br>
<strong><a href=$home>Regresar al inicio</strong></a>.</p>";
}
?>

Nota:

Lo que esta en negrita del codigo citado es lo que le agregue al script original, pero no funciona... Creo que el problema es con esta parte:

Citar
//Check if the securidy code and the session value are not blank
//and if the input text matches the stored text
if ( ($_REQUEST["txtCaptcha"] == $_SESSION["security_code"]) &&
    (!empty($_REQUEST["txtCaptcha"]) && !empty($_SESSION["security_code"])) ) {
  echo "<h1>Test successful!</h1>";
} else {
  echo "<h1>Test failed! Try again!</h1>";
}


Título: Re: Duda con un script de envio en PHP
Publicado por: jcroot en 3 Abril 2007, 22:50 pm
Alguien?   :-(


Título: Re: Duda con un script de envio en PHP
Publicado por: дٳŦ٭ en 4 Abril 2007, 01:50 am
Creo que tiene errores el captcha, te paso uno que hizo un amigo  ;)

En tu formulario agrega:
Código:
<?php
session_start();
$captcha_texto = "";
for ($i = 1; $i <= 6; $i++) {
$captcha_texto .= caracter_aleatorio();
}
$HTTP_SESSION_VARS["captcha_texto_session"] = $captcha_texto;
function caracter_aleatorio() {
mt_srand((double)microtime()*1000000);
$valor_aleatorio = mt_rand(1,3);
switch ($valor_aleatorio) {
case 1:
$valor_aleatorio = mt_rand(97, 122);
break;
case 2:
$valor_aleatorio = mt_rand(48, 57);
break;
case 3:
$valor_aleatorio = mt_rand(65, 90);
break;
}
return chr($valor_aleatorio);
}
?>

Y llamas a la imagen: <img src="crear_imagen.php?<?php echo SID;?>">

En donde procesas el formulario:
Código:
<?php
session_start();
$texto_ingresado = $HTTP_POST_VARS["texto_ingresado"];
$captcha_texto = $HTTP_SESSION_VARS["captcha_texto_session"];

if ($captcha_x == $captcha_texto) {
//si lo puso bien

$destinatario = "xxxxxxxx@gmail.com"; // Quien recibirá los corroes
$asunto = "Mensaje de la pagina PurasPruebeas: ".$asunto; // tema del correo

// Este es el Cuerpo, el contexto del mensaje, la esencia del correo, el todo :)
$cuerpo ="El sr(a) $nombre dice: <br><br> \"$mensaje\", su email es: $email.<br> para dominio: $dominio";


$headers = "MIME-Version: 1.0\r\n";
$headers .= "Content-type: text/html; charset=iso-8859-1\r\n";
// Este es para decir, de donde viene
$headers .= "From: ".$nombre." <".$email.">\r\n";

// aqui entra el trabajo del mail()
mail($destinatario,$asunto,$cuerpo,$headers) ;

header('Location: contacto.php?envio=si');


}
else{
//si lo puso mal
header('Location:  contacto.php?envio=no&error=captcha');
exit();
}
session_unset();
session_destroy();

En crear_imagen.php
Código:
<?php
//creamos la imagen definiendo el tamaño del alto y el ancho (150, 40)
$captcha_imagen = imagecreate(150,40);
//creamos el color negro para el fondo y blanco para los caracteres
$color_negro = imagecolorallocate ($captcha_imagen, 0, 80, 85);
$color_blanco = imagecolorallocate ($captcha_imagen, 255, 255, 255);
//pintamos el fondo con el cplor negro creado anteriormente
imagefill($captcha_imagen, 0, 0, $color_negro);
//iniciamos la session para obtener los caracteres a dibujar
session_start();
$captcha_texto = $HTTP_SESSION_VARS["captcha_texto_session"];
//dibujamos los caracteres de color blanco
imagechar($captcha_imagen, 4, 20, 13, $captcha_texto[0] ,$color_blanco);
imagechar($captcha_imagen, 5, 40, 13, $captcha_texto[1] ,$color_blanco);
imagechar($captcha_imagen, 3, 60, 13, $captcha_texto[2] ,$color_blanco);
imagechar($captcha_imagen, 4, 80, 13, $captcha_texto[3] ,$color_blanco);
imagechar($captcha_imagen, 5, 100, 13, $captcha_texto[4] ,$color_blanco);
imagechar($captcha_imagen, 3, 120, 13, $captcha_texto[5] ,$color_blanco);
$rand1=rand(0,50);
$rand2=rand(2,7);
$rand3=rand(120,150);
$rand4=rand(34,50);
imageline($captcha_imagen, $rand1, $rand2, $rand3, $rand4, $color_blanco);
//indicamos que lo que vamos a mostrar es una imagen
header("Content-Type: image/png");
//mostramos la imagen
imagepng($captcha_imagen);
?>

Saludos


Título: Re: Duda con un script de envio en PHP
Publicado por: jcroot en 4 Abril 2007, 03:38 am
Hola!

Gracias por responder... el captcha o script que intente seguir no tiene errores, el error soy yo, osea el error esta en querer meter el contenido de captcha.php en el script que me encontre en la red (enviado.php).

Si uso el tuyo sera lo mismo, en otras palabras no sabre donde meter el codigo que me pasaste, fijate bien en mi tema que creo que el error esta que no se donde meter esto:

Código:
//Check if the securidy code and the session value are not blank
//and if the input text matches the stored text
if ( ($_REQUEST["txtCaptcha"] == $_SESSION["security_code"]) &&
    (!empty($_REQUEST["txtCaptcha"]) && !empty($_SESSION["security_code"])) ) {
  echo "<h1>Test successful!</h1>";
} else {
  echo "<h1>Test failed! Try again!</h1>";
}

No se donde meter eso o como modificarlo para que se integre facilmente al script de enviado.php

Alguna ayuda?


Título: Re: Duda con un script de envio en PHP
Publicado por: jcroot en 4 Abril 2007, 20:22 pm
nadie?  :huh:


Título: Re: Duda con un script de envio en PHP
Publicado por: jcroot en 6 Abril 2007, 07:14 am
Aun nadie? joer este foro esta pobre...  :-(


Título: Re: Duda con un script de envio en PHP
Publicado por: Nakp en 6 Abril 2007, 19:58 pm
 :xD


Título: Re: Duda con un script de envio en PHP
Publicado por: jcroot en 7 Abril 2007, 00:46 am
:xD

Teft sube mi tema...  ;D


Título: Re: Duda con un script de envio en PHP
Publicado por: jcroot en 8 Abril 2007, 18:54 pm
Subiendo el tema... haber si una buena alma se anima y me responde  ;D