Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

242
Visualizações
Prevenir el spam del formulario de contacto web php

Soy un diseñador web aficionado, busqué en stackoverflow.com y otros sitios web y encontré muchas soluciones para este problema que tengo, pero ninguna funcionó (probablemente porque las implementé incorrectamente). Espero que alguien con más conocimientos pueda ayudarme con una solución simple o mostrarme cómo implementar una de las soluciones que encontré.

El problema: tengo un formulario de contacto php muy simple en el sitio web de mi empresa. Ha funcionado muy bien durante años, pero en la última semana ha sido pirateado. Ahora recibo cientos de envíos de formularios de contacto al día sin comentarios, solo tienen direcciones de correo electrónico (aparentemente válidas) y una cadena de caracteres en el campo de nombre (como "58ee8b52eef46").

He probado varias técnicas para evitar este spam y, o rompen mi formulario php, o no evitan el spam. Si es posible, me gustaría una solución que NO requiera una prueba de texto distorsionado de Captcha, y NO requiera que se completen todos los campos del formulario.

Aquí está mi código PHP completo:

 <?php if(isset($_POST['email'])) { $email_to = "myemail@example.com"; $email_subject = "website form submission"; function died($error) { echo "We are very sorry, but there were error(s) found with the form you submitted. "; echo "These errors appear below.<br /><br />"; echo $error."<br /><br />"; echo "Please go back and fix these errors.<br /><br />"; die(); } if (!isset($_POST['name']) || !isset($_POST['email']) || !isset($_POST['telephone']) || !isset($_POST['comments'])) { died('We are sorry, but there appears to be a problem with the form you submitted.'); } $name = $_POST['name']; $email_from = $_POST['email']; $telephone = $_POST['telephone']; $comments = $_POST['comments']; $error_message = ""; if(strlen($error_message) > 0) { died($error_message); } $email_message = "Form details below.\n\n"; function clean_string($string) { $bad = array("content-type","bcc:","to:","cc:","href"); return str_replace($bad,"",$string); } $email_message .= "Name: ".clean_string($name)."\n"; $email_message .= "Email: ".clean_string($email_from)."\n"; $email_message .= "Telephone: ".clean_string($telephone)."\n"; $email_message .= "Comments: ".clean_string($comments)."\n"; $headers = 'From: '.$email_from."\r\n" . 'Reply-To: '.$email_from."\r\n" . 'X-Mailer: PHP/' . phpversion(); @mail($email_to, $email_subject, $email_message, $headers); ?> Thank you for contacting us. We will be in touch with you soon. You will now be redirected back to example.com. <META http-equiv="refresh" content="2;URL=http://www.example.com"> <?php } die(); ?>
over 4 years ago · Santiago Trujillo
3 Respostas
Responde à pergunta

0

Un truco simple es crear un campo honeypot:

html

 <!-- within your existing form add this field --> <input type="text" id="website" name="website"/>

CSS

 /*in your css hide the field so real users cant fill it in*/ form #website{ display:none; }

php

 //in your php ignore any submissions that inlcude this field if(!empty($_POST['website'])) die();
over 4 years ago · Santiago Trujillo Relatório

0

Un enfoque aún más simple que funciona para mí. Literalmente, todo el spam que recibo (d) tenía una URL en el mensaje. Así que filtré eso y no he recibido ningún mensaje de spam desde entonces. Solía recibir unos 10 a la semana.

Agregue esto debajo de su línea $error_message = ""; en su archivo php:

 if(preg_match('/http|www/i',$comments)) { $error_message .= "We do not allow a url in the comment.<br />"; }

El /i en preg_match lo hace independiente de mayúsculas y minúsculas. El 'http' también filtra para 'https'.

over 4 years ago · Santiago Trujillo Relatório

0

Los campos ocultos, las preguntas tontas (¿cuánto es 3+4?), etc., no son muy efectivos para bloquear el spam en los formularios.

Investigué esto hace varios años y se me ocurrió una solución que llamo "FormSpammerTrap". Utiliza código JavaScript para 'observar' para enfocar/hacer clic en los campos obligatorios. Los procesos automatizados, a menos que estén muy personalizados para un sitio específico (lo que lleva más tiempo del que los propietarios de robots de spam quieren tomar), no pueden 'enfocar/hacer clic' en un campo obligatorio.

Tengo una solución gratuita en mi sitio www.FormSpammerTrap.com . Y hay un formulario que los spambots pueden intentar enviar spam... y no lo han hecho durante más de 3 años. Le invitamos a probarlo... todo es de código abierto, por lo que puede ver cómo funciona. (Y, si usa el formulario, no recopilo su correo electrónico. Respondo una vez y luego elimino su correo electrónico).

Mi técnica es mucho más efectiva para bloquear spambots. No han podido enviar spam al formulario de contacto de ese sitio.

over 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda