Solo lectura

Google Chrome - Foro de ayuda

Esta página web es un archivo de los hilos antiguos de los foros de Google. Más información

Tengo un problema con el recapcha de google, y es que no frena el tráfico de los spamers

mellusalex
3/07/15 6:52
Desde hace ya unos días he tenido que desactivar un foro que se me llenaba de spammers. Tras esto, otro formulario de e-mail con recaptcha google empezó a enviarme cientos de mensajes diarios en inglés y con un número en el apellido y un código en el cuerpo del mensaje.Parece ser que google no frena los mensajes creados por robots.Mi formulario funciona correctamente pues he probado a enviarme mensajes a mí mismo y llegan. El formulario de correo electrónico está en PHP.Me gustaría que google o alguien me ayudara con esto, o lo solucionara, muchas gracias.

Respuestas (10)

avm99963
3/07/15 8:49
¡Hola mellusalex!

¿Qué versión del ReCaptcha estás utilizando? Hay la versión vieja (1.0) y la nueva (2.0)[1].

Saludos :-)


Regresa para continuar la conversación, dar las gracias o marcar mejor respuesta. Encuentra a gente con el mismo problema.
Visita la Guía de inicio y los Temas destacados.
mellusalex
7/07/15 7:31
Es la versión1. ¿Cómo la actualizo en el recaptcha_lib?
avm99963
8/07/15 15:02
¡Hola Mellusalex!

Ahora para verificar el ReCaptcha ya no se usa una librería de PHP, y es bastante fácil hacerlo sin ninguna librería como recaptcha_lib.

Puedes consultar la documentación sobre cómo actualizar el ReCaptcha a la versión 2 en la siguiente página web:
Igualmente, como esa página está en inglés, te he escrito un trozo de código en PHP demostrando la utilidad más básica del ReCaptcha:
Puedes ver el código anterior funcionando en la siguiente página web:
Saludos :-)

EDITO: He cambiado el link al código fuente por otro, ya que en el que había puesto todo el mundo podía modificar el código compartido :-P
mellusalex
9/07/15 7:19
me sale error, y, además, eres un robot. ¿Elimino el sent==1?
El error es el siguiente:
Notice: Undefined index: sent in /var/www/vhost/mellartem.es/home/html/pages/formulariomail.php on line 93
avm99963
10/07/15 5:05
¡Hola mellusalex!

Eso era solo un ejemplo ;-)

La línea if ($_POST["sent"] == "1") { comprueba si el formulario se ha enviado. Entonces lo de dentro de los claudators comprueba si el ReCaptcha es válido o no.

Si no es válido, debería mostrar un mensaje de error diciendo que no se rellenó el ReCaptcha y si es válido, enviar el mensaje.

Saludos :-)
mellusalex
28/08/15 11:37
no entiendo la respuesta. tengo que poner lo mismo?
avm99963
29/08/15 6:44
¡Hey!

No tienes que poner lo mismo. Yo te di un ejemplo para que vieras cómo funciona la nueva versión del ReCaptcha. Lo que tienes que hacer es implementarlo en tu script de envío del formulario, pero adaptándolo a este.

Explico de nuevo. El código se divide en tres partes. Primero la parte donde se establecen las variables con las llaves de la API:

$sitekey = ""; // Aquí va la site key. $privatekey = ""; // Y aquí la private key.

Después, la parte donde se muestra el ReCaptcha

 <script src="https://www.google.com/recaptcha/api.js" async defer></script>
<div class="g-recaptcha" data-sitekey="<?=$sitekey?>"></div>

Y finalmente, después del envío del formulario la parte donde se comprueba que el reto del ReCaptcha haya sido completado:

$response_json = file_get_contents("https://www.google.com/recaptcha/api/siteverify?secret=".urlencode($privatekey)."&response=".urlencode($_POST["g-recaptcha-response"])); $response = json_decode($response_json, true); if ($response["success"] === true) { echo "¡Bien! Has pasado la prueba del ReCaptcha satisfactoriamente \o/"; } else { echo "Parece que eres un robot... Perdóname, pero yo soy de los que discrimina a los robots y no les dejo entrar :-/"; }
Obviamente deberás rellenar el contenido de las variables sitekey y privatekey con los valores que te dé Google, y también deberás cambiar los echos por las acciones pertinentes, como enviar el formulario en caso de que se haya pasado la prueba del ReCaptcha, o mostrar un error en caso de que no se haya pasado la prueba.

¿Me entiendes ahora? Me cuesta un poco explicarlo, lo siento :-(

Saludos :-)
mellusalex
11/09/15 7:04
Me desvela las claves y me sale un error en linea 96
avm99963
11/09/15 7:15
Hola de nuevo.

Veo que lo has puesto bien, pero que sale un error con la función file_get_contents. Lo que ocurre es que no funciona porque está desactivado allow_url_fopen en el php.ini. Si en el archivo php.ini del servidor configuraras allow_url_fopen=on, el error se solucionaría.

Si no puedes modificar el archivo php.ini del servidor, entonces deberemos usar curl en vez de la función file_get_contents. Remplaza file_get_contents por file_get_contents_curl y pon este código justo en la línea anterior:

function file_get_contents_curl($url) {
    $ch
= curl_init();

    curl_setopt
($ch, CURLOPT_AUTOREFERER, TRUE);
    curl_setopt
($ch, CURLOPT_HEADER, 0);
    curl_setopt
($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt
($ch, CURLOPT_URL, $url);
    curl_setopt
($ch, CURLOPT_FOLLOWLOCATION, TRUE);      

    $data
= curl_exec($ch);
    curl_close
($ch);

   
return $data;
}

Saludos :-)
mellusalex
11/09/15 9:02
donde tengo que poner esto? He creado el archivo php.ini en blanco. Luego he puesto las indicaciones que me dices pero no sé si lo hago bien porque me sigue saliendo lo mismo. Me desvela el código. con error en linea 108