Foros del Web » Programando para Internet » PHP »

formmail.php inseguro

Estas en el tema de formmail.php inseguro en el foro de PHP en Foros del Web. Hola a todos. Posteo esto porque acabo de darme cuenta que he recomendado (incluso con descarga directa desde mi servidor) el formmail.php para hacer formularios ...
  #1 (permalink)  
Antiguo 20/04/2008, 14:29
Avatar de geq
geq
 
Fecha de Ingreso: agosto-2006
Ubicación: Rosario
Mensajes: 655
Antigüedad: 17 años, 8 meses
Puntos: 22
Exclamación formmail.php inseguro

Hola a todos.
Posteo esto porque acabo de darme cuenta que he recomendado (incluso con descarga directa desde mi servidor) el formmail.php para hacer formularios de contacto, y tuve un inconveniente (aunque muy obvio) de seguridad hace poco y hubo que hacer una reforma, la cual detallo aquí.

Sucede que el email de destino estaba en un campo oculto en el formulario. Pero claro fue hecho cuando no había gente suficientemente al p*** para andar buscando formularios y utilizarlos para enviar publicidad de viagra (sin ofender)

Lo modificamos para añadir captcha, pero hasta ahora no se nos había ocurrido que un robot puede poner otro mail en el campo oculto y explotar el script, si es que no usa captcha.

Así que dejo las dos sencillas modificaciones que hay que realizar al script. La única limitación es que ahora la dirección de destino está en el mismo, pero con muy poco ingenio se puede adaptar para utilizar más de una dirección.

Buscar la línea:
Código PHP:
var $config_vars_array = array("recipient"                 => ""
y comentar el elemento recipient, o bien eliminarlo del array
Código PHP:
var $config_vars_array = array(/*"recipient"                 => "",*/ 
Buscar:
Código PHP:
/* proccess form */
        
$this->set_arrays();
        
$this->check_referer();
        
$this->check_recipient();
        
$this->check_required_fields();
        
$this->send_form();
        
$this->display_thankyou(); 
en la función Form_Mail() y asignar el valor de recipient que eliminamos antes, que normalmente traería del formulario:
Código PHP:
/* proccess form */
        
$this->set_arrays();
        
$this->config_vars_array["recipient"]="AQUÍ LA DIRECCIÓN DE CORREO";
        
$this->check_referer();
        
$this->check_recipient();
        
$this->check_required_fields();
        
$this->send_form();
        
$this->display_thankyou(); 
Y eso es todo, para una sola dirección. Opcionalmente se puede eliminar el campo oculto "recipient" del formulario, pero no interfiere.

Si hubiera más de una dirección, podría pasarse algún valor que la identifique mediante un campo oculto y asignarle a "recipient" el valor qe corresponda, de la misma manera que en el ejemplo.

Aquí dejo el formmail.php actualizado (en la misma url que el anterior)

http://www.cqsoft.com.ar/formmail.php.zip

Espero que sirva,
Éxitos.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 06:33.