Instalación de un captcha obligatorio
depaninf
Mensajes publicados
154
Estado
Miembro
-
jordane45 Mensajes publicados 30426 Fecha de registro Estado Moderador Última intervención -
jordane45 Mensajes publicados 30426 Fecha de registro Estado Moderador Última intervención -
Bonjour,
He estado recibiendo mucho spam desde la página de contacto de mi sitio durante un tiempo. Así que instalé un captcha, pero no he podido hacerlo obligatorio...
He leído bien las instrucciones, pero no logro hacerlo... necesitaría ayuda paso a paso.
Entre las dos etiquetas head he puesto la integración del lado del cliente:
Y en el lugar donde quiero el captcha he puesto
La integración del lado del servidor falta, pero no sé cómo hacerlo....
¿Alguien puede ayudarme? :)
Gracias
He estado recibiendo mucho spam desde la página de contacto de mi sitio durante un tiempo. Así que instalé un captcha, pero no he podido hacerlo obligatorio...
He leído bien las instrucciones, pero no logro hacerlo... necesitaría ayuda paso a paso.
Entre las dos etiquetas head he puesto la integración del lado del cliente:
<script src='https://www.google.com/recaptcha/api.js' async defer></script>
Y en el lugar donde quiero el captcha he puesto
<div class="g-recaptcha" data-sitekey="mi_clave_del_sitio"></div>
La integración del lado del servidor falta, pero no sé cómo hacerlo....
¿Alguien puede ayudarme? :)
Gracias
4 respuestas
-
Hola,
Para comenzar, deberías mostrarnos el código completo de tu formulario.
Luego, el código PHP que procesa los datos de este formulario.
Puedes, de paso, hacer unprint_r($_POST);
al principio de tu código PHP para ver qué te devuelve recaptcha en caso de buena o mala respuesta.
Deberías tener una variable del tipo g-recaptcha-response.. es ella la que te permitirá saber si el usuario ha validado o no el captcha.
--
Atentamente,
Jordane-
Bonsoir Jordane y gracias por tu respuesta.
No he entendido cómo hacer elprint_r($_POST);
así que te envío el código completo de la página.
En el lado de PHP no tengo ninguna línea con una variable como g-recaptcha-response. Tengo un carpeta bat que contiene rd-mailform.php y una carpeta phpmailer, dentro de la carpeta phpmailer tengo 4 archivos php: class.phpmailer; class.pop3; class.smtp y PHPMailerAutoload.
¿Cuál deberías enviarte?
¡Gracias de nuevo por tu ayuda!
Aquí está el código de la página HTML:
<!DOCTYPE html> <html lang="fr"> <html xmlns:og="http://ogp.me/ns#"> <head> <title>SOS Dépannage informatique: para contactarnos</title> <meta charset="utf-8"> <meta property="og:title" content="SOS Dépannage Informatique: reparación de computadores in situ en París y su región"> <meta property="og:locale" content="fr_FR"> <meta property="og:type" content="website"> <meta property="og:url" content="https://www.sosdepaninformatique.com/"> <meta property="og:image" content="https://www.sosdepaninformatique.com/images/reseau2.jpg"> <meta property="og:site_name" content="SOS Dépannage Informatique"> <meta property="og:description" content="Reparación informática a domicilio y en el lugar para particulares, artesanos y empresas en París y en la región de París. 06 21 43 06 15 de lunes a sábado de 9h a 22h."> <meta property="og:image:alt" content="reparación informática en Créteil"> <meta property="fb:app_id" content="249991368794737"> <meta property="fb:admins" content="113574806021696"> <meta name="twitter:description" content=" Reparación informática a domicilio y en el lugar para particulares, artesanos y empresas en París y en la región de París. 06 21 43 06 15 de lunes a sábado de 9h a 22h."> <meta name="twitter:title" content=" SOS Dépannage Informatique: reparación de computadores in situ en París y su región"> <meta name="twitter:card" content="summary"> <meta name="format-detection" content="telephone=no"> <meta http-equiv="Content-Language" content="fr"> <meta name="viewport" content="width=device-width,minimum-scale=1,initial-scale=1"> <met <meta charset="utf-8"> <meta property="og:title" content="SOS Dépannage Informatique: reparación de computadores in situ en París y su región"> <meta property="og:locale" content="fr_FR"> <meta property="og:type" content="website"> <meta property="og:url" content="https://www.sosdepaninformatique.com/"> <meta property="og:image" content="https://www.sosdepaninformatique.com/images/reseau2.jpg"> <meta property="og:site_name" content="SOS Dépannage Informatique"> <meta property="og:description" content="Reparación informática a domicilio y en el lugar para particulares, artesanos y empresas en París y en la región de París. 06 21 43 06 15 de lunes a sábado de 9h a 22h."> <meta property="og:image:alt" content="reparación informática en Créteil"> <meta property="fb:admins" content="113574806021696"> <meta name="twitter:card" content="summary"> <meta name="twitter:site" content="@SDI_Depan_info"> <meta name="twitter:title" content=" SOS Dépannage Informatique: reparación de computadores in situ en París y su región"> <meta name="twitter:description" content="Reparación informática a domicilio y en el lugar para particulares y empresas en París y en la región de París. 06 21 43 06 15."> <meta name="twitter:creator" content="@SOS Dépannage Info"> <meta name="twitter:image" content="https://www.sosdepaninformatique.com/images/reseau3.jpg"> <meta name="format-detection" content="telephone=no"> <meta http-equiv="Content-Language" content="fr"> <meta name="viewport" content="width=device-width,minimum-scale=1,initial-scale=1"> <meta content="text/html; charset=utf-8" http-equiv="content-type"> <meta name="title" content="SOS Dépannage Informatique : para contactarnos !"/> <meta name="description" content="Contacte a su reparador informático a domicilio y en el lugar para particulares y empresas en París y en la región de París. Asistencia informática."/> <meta name="keywords" content="reparación informática a domicilio, reparación de ordenador y PC en París, depannage pme artesanos empresas particulares, mantenimiento de redes y asistencia informática, contacto, dirección, correo, teléfono, plano de acceso, email, datos de contacto"/> <meta name="author" content="SOS Dépannage Informatique, reparación Créteil"/> <meta name="identifier-url" content="https://www.sosdepaninformatique.com"/> <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"> <link rel="icon" href="images/favicon.ico" type="image/x-icon"> <link rel="icon" type="image/png" href="/favicon-32x32.png" sizes="32x32"> <link rel="icon" type="image/png" href="/favicon-16x16.png" sizes="16x16"> <link rel="apple-touch-icon" href="/apple-touch-icon.png"><link rel="stylesheet" href="css/mailform.css"/> <link rel="stylesheet" href="css/grid.css"> <link rel="stylesheet" href="css/style.css"> <link rel="canonical" href="https://www.sosdepaninformatique.com/"> <link rel="dns-prefetch" href="//ajax.googleapis.com"> <link rel="dns-prefetch" href="//www.sosdepaninformatique.com"> <link rel="dns-prefetch" href="//s.w.org"> <script src="js/jquery.js"></script> <script src="js/jquery-migrate-1.2.1.js"></script> <script src="js/device.min.js"></script> <script src="https://www.google.com/recaptcha/api.js" async defer></script> </head> <body> <script> (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o), m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m) })(window,document,'script','https://www.google-analytics.com/analytics.js','ga'); ga('create', 'UA-4195061-2', 'auto'); ga('send', 'pageview'); </script> </head> <body> <div class="page"> <!--======================================================== HEADER =========================================================--> <header> <div class="well"> <div class="container"> <div class="brand"> <span class="brand_name"> <a href="https://www.sosdepaninformatique.com/" title="Reparación informática in situ">SOS <span>Dépannage Informatique</span></a> </div> <div class="contacts"> <a href="tel:+33621430615" title="Llámanos">06 21 43 06 15</a> <dl> <dt>Horarios de apertura</dt> <dd>Lun-Sab 9:00 a 22:00</dd> </dl> </div> </div> </div> <div id="stuck_container" class="stuck_container"> <nav class="nav"> <div class="container"> <ul class="sf-menu" data-type="navbar"> <li class="active"> <a href="https://www.sosdepaninformatique.com/" title="Inicio SDI">Inicio</a> </li> <li> <a href="a-propos.html" title="Presentación SDI">Presentación</a> </li> <li> <a href="services.html" title="Nuestros servicios">Servicios</a> <ul> <li> <a href="services.html#depannage-courant" title="Mantenimiento informático">Reparación informática</a> </li> <li> <a href="services.html#reseaux" title="Redes y servidores informáticos">Redes y seguridad</a> </li> <li> <a href="services.html#formation" title="Formación en informática y Windows">Formación</a> </li> <li> <a href="services.html#sites-internet" title="Creación de sitios web y tiendas en línea">Creación de sitios, Tiendas</a> </li> <li> <a href="services.html#sauvegarde" title="Copia de seguridad de sus datos">Copias de seguridad en línea</a> </li> <li> <a href="services.html#sauvegarde" title="Recuperación de datos">Recuperación de datos</a> </li> <li> <a href="index.html#diagnostic" title="Reparación a distancia">Asistencia remota</a> </li> <li> <a href="services.html#materiel-info" title="Material, software informático y componentes">Venta de material</a> </li> <li> <a href="services.html#cameras" title="Cámaras de vigilancia IP">Cámaras de vigilancia IP</a> </li> </ul> </li> <li> <a href="comprendre.html" title="Para entendernos">Comprender</a> <ul> <li> <a href="lexique" title="Glosario de términos informáticos">Glosario</a> </li> <li> <a href="glossaire" title="Glosario de términos comunes">Glosario 2017</a> </li> </ul> </li> <li> <a href="tarifs-entreprises" title="Nuestros precios para profesionales">Precios empresas</a> </li> <li> <a href="tarifs-particuliers" title="Nuestros precios para particulares">Precios particulares</a> </li> <li> <a href="temoignages.html" title="Sus testimonios">Sus testimonios</a> </li> <li> <a href="contact.html" title="Contáctenos">Contactar</a> </li> </ul> </div> </nav></div> </header> <!--======================================================== CONTENT =========================================================--> <main> <section class="well-4 well-4__off divider-xs well-xs-1"> <div class="container"> <h1><strong>Contáctenos SDI</strong> su reparador informático in situ</h1> <div class="row row__off-2"> <div class="col-md-4 col-sm-4 col-xs-12"> <font size="6" color="#333333" face="Raleway sans-serif">Formulario de contacto</font><br> <br><address class="addr"><p class="h2">20 rue Claude Nicolas Ledoux<br/> 94000 Créteil</h2></p> <dl> <h2>Teléfono : <a href="tel:+33621430615" title="Llámanos">06 21 43 06 15</a></h2> </dl> <dl> <br> <iframe src="https://www.google.com/maps/embed?pb=!1m18!1m12!1m3!1d2629.8211336673157!2d2.4683823156711364!3d48.766211979278516!2m3!1f0!2f0!3f0!3m2!1i1024!2i768!4f13.1!3m3!1m2!1s0x0%3A0xd1c5a5ceed3072d7!2sSOS+D%C3%A9pannage+Informatique!5e0!3m2!1sfr!2sus!4v1499367345408" width="260" height="220" frameborder="0" style="border:0" allowfullscreen></iframe> </dl><br> <p><dl> <h2>Zona de intervención :<br> París y Región parisina</h2></p> </dl> <br/> </address> </div> <div class="col-md-8 col-sm-8 col-xs-12"> <font size="6" color="#333333" face="Raleway sans-serif">Formulario de contacto</font><br> <br><form class='mailform' method="post" action="bat/rd-mailform.php"> <input type="hidden" name="form-type" value="contact"/> <fieldset> <div class="mail-wrap"> <label data-add-placeholder> <input type="text" name="name" placeholder="Nombre*:" data-constraints="@LettersOnly @NotEmpty"/> </label> <label data-add-placeholder> <input type="text" name="email" placeholder="Correo electrónico*:" data-constraints="@Email @NotEmpty"/> </label> <label data-add-placeholder> <input type="text" name="phone" placeholder="Teléfono*:" data-constraints="@Phone @NotEmpty"/> </label> </div> <label data-add-placeholder> <textarea name="message" placeholder="Comentarios*:" data-constraints="@NotEmpty"></textarea> </label> <div class="g-recaptcha" data-sitekey="********"></div> <div class="mfControls"> <button class="btn-primary" title="Envíanos tu mensaje" type="submit">Enviar</button> </div> <p>*requerido</p><br/> </fieldset> </form> </div> </div> </div> </section> </main> <!--======================================================== FOOTER =========================================================--> <footer class="footer-wrap"> <section> <div class="container"> <div class="row"> <div class="col-md-4 col-sm-6"> <h5>Acerca de</h5> <br><p><strong>SOS Dépannage Informatique</strong> nació de la experiencia adquirida en el campo a lo largo de los últimos 20 años.</p> <p>Hábiles con la herramienta informática y con las nuevas tecnologías, nos proponemos compartir estos conocimientos con nuestros socios.</p> <p>Ya sea que sea un profesional o un particular, <strong>SDI</strong> pone un experto a su servicio y le dará total satisfacción.</p> <p>Una hora de intervención a menudo es suficiente para resolver los pequeños problemas comunes.</p> </div> <div class="col-md-4 col-sm-6"> <h5>Contacto</h5> <address class="footer-term-list"> <br><p><span class="font-primary">Dirección:</span> 20 rue Claude Nicolas Ledoux 94000 Créteil</p> <dl> <dt class="font-primary"> Teléfono: </dt> <dd> <a href="tel:+*******" title="Llámanos" class="phone fa-phone">06 21 43 06 15</a> </dd> <dt class="font-primary">Horarios de apertura:</dt> <dd>Lun-Sab 9:00 a 22:00</dd> </dl> <dl> <dt class="font-primary"> <p></p> <p><a href="********/" title="SOS Dépannage Informatique copyright">SOS <span>Dépannage Informatique © 2005 - <span id="copyright-year"></span></span></a></p> </dt> <p><br> <br> <a href="http://www.facebook.com/sharer.php?u=https://www.facebook.com/sosdepannageinformatique/&t=Servicio+de+d%C3%A9pannage+inform%C3%A1tico+in-situ+accesible+en+Par%C3%ADs+y+en+la+regi%C3%B3n+parisina" rel="nofollow noopener noreferrer" target="_blank"><img src="reseaux/facebook.png" alt="Facebook" height="36" width="36"></a> <a href="https://www.pagesjaunes.fr/contribution/avis_flow/09372230/create?codeRubrique=26100300rel=" nofollow="" noopener="" noreferrer"="" target="_blank"><img src="reseaux/pagesjaunes.png" alt="Pages_jaunes" height="36"width="36"></a> <a href="http://twitter.com/share?url=https://twitter.com/SDI_Depan_info/&text=Servicio+de+d%C3%A9pannage+inform%C3%A1tico+in-situ+accesible+en+Par%C3%ADs+y+en+la+regi%C3%B3n+parisina" rel="nofollow noopener noreferrer" target="_blank"><img src="reseaux/twitter.png" alt="Twitter" height="36" width="36"></a> <a href="https://www.instagram.com/sos_depannage_informatique/" rel="nofollow noopener noreferrer" target="_blank"><img src="reseaux/instagram.png" alt="Instagram" height="36" width="36"></a> <a href="https://www.linkedin.com/cws/share?token&isFramed=false&url=https://www.linkedin.com/in/sosdepannageinformatique/&title=Servicio+de+d%C3%A9pannage+inform%C3%A1tico+in-situ+accesible+en+Par%C3%ADs+y+en+la+regi%C3%B3n+parisina" rel="nofollow noopener noreferrer" target="_blank"><img src="reseaux/linkedin.png" alt="Linkedin" height="36" width="36"></a> <a href="https://plus.google.com/share?url=https://plus.google.com/u/0/collection/osiBTE" rel="nofollow noopener noreferrer" target="_blank"><img src="reseaux/google-plus.png" alt="Google+" height="36" width="36"></a> <a href="https://goo.gl/maps/GxT5q6K8X7C2" rel="nofollow noopener noreferrer" target="_blank"><img src="reseaux/google-maps.png" alt="Google-Maps" height="36" width="36"></a></p><br/> <br> </dl> </address> </div> <div class="col-md-4 col-sm-12"> <h5>Enlaces internos</h5> <address class="footer-term-list"> <ul class="marked-list offset"> <p></p> <br><li><a href="temoignages" title="Sus testimonios clientes">Sus testimonios</a> </li> <li class="item"> <a href="lexique" title="Glosario">Glosario</a> </li> <li class="item"> <a href="glossaire" title="Glosario">Glosario</a></li> <li class="item"> <a href="partenaires" title="Socios">Socios</a></li> <li class="item"> <a href="mentions-legales" title="Avis legales SDI">Avis legales</a><br/> </li> <li class="item"> <a href="sitemap" title="Mapa del sitio de SDI">Mapa del sitio</a><br/> </li> <li class="item"> <a href="conditions-generales-de-vente" title="Condiciones generales de venta">Condiciones generales de venta</a><br/> </li> </ul> <p></p> </address> </div> </div> </div> </section> </footer> </div> <script src="js/script.js"></script> </body> </html> -
-
-
-
-
Alors le voilà :)
<?php $recipients = 'depaninf@sosdepaninformatique.com'; //$recipients = '#'; try { require './phpmailer/PHPMailerAutoload.php'; preg_match_all("/([\w-]+(?:\.[\w-]+)*)@((?:[\w-]+\.)*\w[\w-]{0,66})\.([a-z]{2,6}(?:\.[a-z]{2})?)/", $recipients, $addresses, PREG_OFFSET_CAPTURE); if (!count($addresses[0])) { die('MF001'); } if (preg_match('/^(127\.|192\.168\.)/', $_SERVER['REMOTE_ADDR'])) { die('MF002'); } $template = file_get_contents('rd-mailform.tpl'); if (isset($_POST['form-type'])) { switch ($_POST['form-type']){ case 'contact': $subject = 'Vous avez un message visiteur'; break; case 'subscribe': $subject = 'Subscribe request'; break; case 'order': $subject = 'Order request'; break; default: $subject = 'Vous avez un message visiteur'; break; } }else{ die('MF004'); } if (isset($_POST['email'])) { $template = str_replace( ["<!-- #{FromState} -->", "<!-- #{FromEmail} -->"], ["Email:", $_POST['email']], $template); }else{ die('MF003'); } if (isset($_POST['message'])) { $template = str_replace( ["<!-- #{MessageState} -->", "<!-- #{MessageDescription} -->"], ["Message:", $_POST['message']], $template); } preg_match("/(<!-- #{BeginInfo} -->)(.|\n)+(<!-- #{EndInfo} -->)/", $template, $tmp, PREG_OFFSET_CAPTURE); foreach ($_POST as $key => $value) { if ($key != "email" && $key != "message" && $key != "form-type" && !empty($value)){ $info = str_replace( ["<!-- #{BeginInfo} -->", "<!-- #{InfoState} -->", "<!-- #{InfoDescription} -->"], ["", ucfirst($key) . ':', $value], $tmp[0][0]); $template = str_replace("<!-- #{EndInfo} -->", $info, $template); } } $template = str_replace( ["<!-- #{Subject} -->", "<!-- #{SiteName} -->"], [$subject, $_SERVER['SERVER_NAME']], $template); $mail = new PHPMailer(); $mail->From = $_SERVER['SERVER_ADDR']; $mail->FromName = $_SERVER['SERVER_NAME']; foreach ($addresses[0] as $key => $value) { $mail->addAddress($value[0]); } $mail->CharSet = 'utf-8'; $mail->Subject = $subject; $mail->MsgHTML($template); if (isset($_FILES['attachment'])) { foreach ($_FILES['attachment']['error'] as $key => $error) { if ($error == UPLOAD_ERR_OK) { $mail->AddAttachment($_FILES['attachment']['tmp_name'][$key], $_FILES['Attachment']['name'][$key]); } } } $mail->send(); die('MF000'); } catch (phpmailerException $e) { die('MF254'); } catch (Exception $e) { die('MF255'); } ?>
EDIT: Ajout de la coloration syntaxique-
-
Nota: Para publicar tu código en el foro, recuerda indicar el LENGUAJE en las etiquetas de código para tener la coloración de sintaxis.
Explicaciones dadas aquí: https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code -
-
-
-
-
La error está relacionada con el hecho de que tu formulario se llama en Ajax y que el print_r muestra información que no está codificada en JSON
Al mirar en la CONSOLE del navegador se puede ver claramente que el print_r devuelve la información esperada.. es decirArray ( [form-type] => contacto [name] => aa [email] => test@gg.com [phone] => 0123456789 [message] => azaz [g-recaptcha-response] => 03AMGVjXg4dKjinxK16Hi2MEhi-NfDiMQNdq8E4ZCFcey5ZlS_WeibJj0QgSH0W5evzZ1Me4xaAhPmVN1tH1UzNIQ5aLb_7etUOR8anqimg3fdMX83okoQKjQUKAlxyykZdfUh0oc-I-jYkNmkZSrOKmUsbpvugYEf7ERW7K2-YbtK9hfG9y7rSENukCrsD3nBUYLmIVJwwwMwNcQEYBSDB1EvqM9UJCYVh5lVNYJkn3AZ8T7RNdPHzTgw8iAeergJ7f5seoes3WR-b0cPswch7_hqmurVNdFxbajgNV68Xi7SbI5ApvKBErc ) MF000
Como puedes ver, existe una variable g-recaptcha-response
y cuando no se marca el captcha obtenemos:Array ( [form-type] => contacto [name] => aaa [email] => gg@test.com [phone] => 0123456789 [message] => test [g-recaptcha-response] => )
Entonces.. como te decía.. solo necesitas, en tu código PHP verificar que la variable
$_POST['g-recaptcha-response'] no esté vacía mediante un if !empty
y según... procesar la solicitud o no.
--
Atentamente,
Jordane -
Lo siento.. es un empty el que hay que utilizar y no un !empty
if (empty($_POST['g-recaptcha-response'])) { die('MF001'); // o cualquier otro código... no he mirado para qué sirven en tu caso. }