Archivo de la etiqueta: spam

Alternativa a Akismet

[blog]

Durante el tiempo que he tenido alojado el blog en servidores gratuitos, no he podido utilizar Akismet. Uno de sus requisitos es poder conectarse directamente a la base de datos de Akismet, de donde se obtiene la información sobre spam, pero en los servidores gratuitos esto no era posible. Sin embargo, ahora que tengo un servidor decente he podido tener Akismet en marcha durante un tiempo, y he acabado un tanto decepcionado.

La primera impresión fue buena, con Akismet el spam desapareció, pero también desaparecieron algunos comentarios que sí eran válidos. Y ese es el problema con Akismet, es increíblemente restrictivo y puede hacer desaparecer comentarios correctos. Es más, durante las últimas semanas, se empezaron a colar comentarios spam en el blog. Igual uno cada dos o tres días, pero comentarios que son descaradamente spam, escritos en inglés, con un texto genérico, apuntando a una URL de publicidad y con un email sospechoso. Y Akismet los daba por válidos. ¡Pues menuda decepción!

Estuve tentado de volver a mi solución anterior, que me había dado excelentes resultados. El problema es que ese código se machaca al realizar una actualización de WordPress, por lo que es costoso de mantener. Lo ideal sería tener un plugin que ofreciese esa funcionalidad, y buscando por internet eso es justo lo que encontré.

El plugin se llama Invisible Captcha y hace exactamente lo que hacía yo, pero en forma de plugin. Añade un campo oculto y aleatorio al formulario de envío de comentarios y después comprueba si el valor del campo es correcto. En caso contrario, el comentario es spam. Lo he usado unas semanas y funciona de lujo. No se ha colado ni un comentario de spam.

Por defecto Invisible Captcha ofrece tres opciones, marcar como spam, marcar para moderación o enviar a la papelera. En mi caso, no quería ni verlos en la papelera, quería que directamente desaparecieran para no tener que estar vaciando la papelera cada dos por tres. Para ello borro el comentario en cuanto es marcado como basura:

if ($invisible_captcha_spam_action=='delete') {
    wp_set_comment_status($id, 'trash');
    wp_delete_comment($id);
    wp_die($invisible_captcha_spam_message, '', array('response' => 403));
}

La línea que he añadido es wp_delete_comment($id); Es importante que el comentario se haya marcado primero como ‘trash’ ya que el método wp_delete_comment solo borra un comentario que ya esté en la papelera.

En definitiva, recomiendo Invisible Captcha como alternativa a Akismet para evitar el spam automático. En blogs con mucho tráfico donde tal vez el spam es introducido por humanos, Invisible Captcha sería inútil. Pero tampoco se como de eficaz sería Akismet en ese caso. De momento para mi blog, me basta y me sobra.

SPAM Fight – Round 4!

[blog] [programación]

Cuando pensaba que había encontrado el método definitivo anti-spam, resultó no ser eficaz ni durante un día entero. Algunos de los comentarios se estaban marcando correctamente como SPAM, que deben ser los que atacan directamente a wp-comments-post.php. Sin embargo seguían llegando algunos comentarios de SPAM, y no tengo ni idea de como lo están haciendo. Debe haber otra manera de hacer un POST de un comentario, pero por el momento no la he encontrado.

Lo que sí que me he dado cuenta, es que estos comentarios nunca tienen establecido un correo electrónico (al menos de momento). Utilizando ese dato, he complementado el método de identificación de SPAM con el requerimiento de un correo. En wp-includes/comment.php:

if(strpos($comment_content, '[THIS#IS#SPAAAM!]') !== false
    || !is_email($comment_author_email)){
    $comment_approved = 'spam';
}

De momento con esto estoy cazando todo el SPAM. ¡Veremos si dura!

Sigue la lucha contra el Spam

[blog] [programación]

Ya comenté en un post anterior los problemas que estaba teniendo con el Spam.

Como tuve los problemas de indexación en Google, dejaron de bonbardearme, pero ahora que está resuelto, vuelvo a ver una buena cantidad de comentarios Spam nuevos cada vez que me paso por el blog. Dije la última vez que WordPress no traía un sistema anti-spam integrado, y era mentira. Tras investigar un poco veo que trae Akismet, que parece ser una solución muy robusta anti-spam. El problema es que al igual que me pasaba con ReCaptcha, el plugin de Akismet intenta hacer una conexión externa y parece ser el servidor gratuito de FreeHostia no lo permite, por lo que sigo sin poder usar esa opción.

Algo que veo que tienen en común todos los comentarios spam es que no tienen especificado un correo electrónico, cuando es indispensable para mandar un comentario. Por más pruebas que hago no consigo replicar la creación de un comentarios sin correo, lo que me hace pensar que de alguna manera deben estar saltándose alguna de las comprobaciones de wordpress, aunque no intuyo como.

Buscando el momento exacto en el que se guardan los comentarios en la base de datos, parece ser que es en el fichero /wp-includes/comment.php, en el método wp_insert_comment. No se siquiera si es posible que estén llegando hasta este punto evitando algún paso intermedio, pero por si acaso he añadido aquí una comprobación adicional para verificar que el correo del comentario existe y es correcto:

if(!is_email($comment_author_email)){
  return -1;
}

Ahora toca esperar y ver si ha sido efectivo…

ACTUALIZACIÓN 12/12/2011

Aunque el código anterior parecía efectivo, al impedir por completo la creación del nuevo comentario, no había manera de comprobarlo. Si tras unas semanas no aparecía nuevo spam, se podría decir que ha funcionado, pero como quería algo más definitivo, he modificado el código por lo siguiente:

if(!is_email($comment_author_email)){
  $comment_approved = 'spam';
}

Así, lo que hago es permitir que se inserte en la base de datos, pero marcado directamente como spam, y ya ha dado sus frutos, acabo de ver un nuevo comentario de spam etiquetado automáticamente como tal. Se confirma entonces que de alguna manera están evitando el método normal de añadir un comentario en wordpress, y que este código es efectivo en contrarrestarlo mientras no rellenen el campo de correo.

Evitando los comentarios spam con reCAPTCHA

[blog]

Con tanto cambio de dominio y de blog he tenido algunos problemillas a la hora de que Google me indexe el blog, pero al final, tras unas cuantas semanas haciendo pruebas con las herramientas para webmasters de Google por fin me vuelve a indexar poco a poco.

Esto ha generado otro problema, y es que han empezado a aparecer comentarios spam. Que rabia la primera vez que entro y veo 8!! comentarios nuevos, para al final descubrir que todos eran spam. La verdad es que me extraña que WordPress no tenga por defecto algún tipo de captcha aunque fuese sencillo, pero por suerte hay un buen surtido de plugins para solucionar esto.

Mi elección fue el plugin de reCAPTCHA por ser el más recientemente actualizado, y por tener el respaldo de Google, que suele ser una buena garantía.

Se necesitan unas claves para activarlo. Esta es la página oficial con toda la información necesaria.

Por el momento dos días sin spam, así que objetivo cumplido!

[Actualización 07/07/2011]

Ummmm, tengo un misterio entre manos. El caso es que comprobé que aparecía el captcha en la página de comentarios, pero no comprobé si funcionaba! Hoy he hecho la prueba y directamente da un error, no se pueden hacer comentarios nuevos… y sin embargo, tengo un nuevo comentario de spam!!! ¿Qué oscuros poderes habrán utilizado?

[Actualización 11/07/2011]

Tras investigar un poco, parece que el problema con reCAPTCHA se debe a que intenta abrir una conexión externa y mi servidor no lo permite, así que he buscado una alternativa. Se llama SI CAPTCHA y aunque me da la impresión que no es tan seguro, confío en que evitará la mayoría del spam.