Reducir el spam en WordPress

Si a muchos os parece increíble el correo spam que recibís, alucinaríais con la cantidad de spam que se intenta colar en un blog, akismet (del que ahora os hablo) ya lleva interceptados 3.200 millones de spam y el ritmo de crecimiento es exponencial. En los blogs el spam llega en forma de comentarios en los post y también como trackbacks.

Akismet. Este es un plugin que viene incorporado por defecto en las versiones de wordpress, su función es detectar cuál de los comentarios que recibes es spam y así eliminarlo de los post y llevarlo a una ‘carpeta’ aparte, si en algún caso tiene dudas lo lleva a otra carpeta de ‘pendiente de moderación’ y desde allí tendrás que aprobarlo o rechazarlo.

Akismet se basa en que es un sistema colaborativo, si algunos usuarios marcan un comentario como spam, el servidor de akismet le mete en la lista negra y a partir de entonces todos los comentarios como ese (en cuanto a contenido, ip de procedencia) se marcarán como spam en cualquier blog. Y por aquí va apareciendo el problema, algunos comentarios ‘buenos’ quedan marcados como spam, lo que nos obliga a revisar diariamente las carpetas de spam para ver que no hemos dejado ningún comentario legítimo abandonado.

Antispam por campo oculto:

Esto está sacado de”sigt: sistema antispam del campo oculto” así que si queréis ampliar pasaros por allí. Para activarlo hay que remangarse y tocar el CSS, el HTML y el PHP, pero son pequeños cambios así que nadie se me asuste:

  • CSS: añadir esta línea en el style.css
    .hid { display: none; }.
    Este cambio os recomiendo hacerle 24 horas antes que los siguientes, para ‘aseguraros’ de que todos vuestros visitantes tengan el CSS cambiado cuando hayáis metido las demás modificaciones. Los navegadores se guardan los archivos CSS de una vez para otra con el fin de aligerar la carga de las páginas, por lo que si haces un cambio en el CSS no todos los visitantes lo recibirán en su próxima visita
  • PHP: en wp-comments-post.php buscas el código
    [php]$comment_author = trim($_POST[‘author’]);
    $comment_author_email = trim($_POST[‘email’]);
    $comment_author_url = trim($_POST[‘url’]);
    $comment_content = trim($_POST[‘comment’]);[/php]
    y lo cambias por
    [php]$comment_author = trim($_POST[‘nombre’]);
    $comment_fake_author = trim($_POST[‘author’]);
    $comment_author_email = trim($_POST[‘email’]);
    $comment_author_url = trim($_POST[‘url’]);
    $comment_content = trim($_POST[‘comment’]);
    [/php]
    Lo que hacemos es crear un campo más, donde recogemos el campo original de WP para el nombre del comentarista (aquí dejará su nombre el robot spammeador), y creamos uno nuevo donde esperamos coger el nombre del del comentarista ‘humano’. A continuación busca la línea
    [php]if ( ” == $comment_content ) die( __(‘Error: please type a comment.’) );[/php]
    y cámbiala por
    [php]if ( ‘author’ != $comment_fake_author ) // Es spam die(‘¡mira que eres spammer!’);[/php]
    Ahora busca
    [php]if ( $user->ID ) { $comment_author = $wpdb->escape($user->display_name);[/php]
    y añade, justo a continuación, la línea
    [php] $comment_fake_author = “author”;[/php]
    Esto es porque los usuarios registrados no tienen que escribir nada en la casilla de nombre por lo que, de no incluirla, todos los comentarios irían clasificados como spam.
  • Plantilla: Edita el archivo comments.php. Busca el código
    [php]<input type=”text” name=”author” id=”author” value=”” tabindex=”1″ />[/php]
    y substituyelo por
    [php];
    <input type=”text” name=”nombre” id=”nombre” value=”” tabindex=”2″ />[/php]
    El primero de los campos es el que permanecerá oculto para todos los usuarios ‘humanos’ y es el que esperamos que cambie el bot spammer con lo que le identificaremos

Listo, si vas poco a poco no es complicado, no te dejes apabullar por el código. Por supuesto recomiendo ENCARECIDAMENTE que antes de tocar nada hagas una copia y que si puedes probar los cambios antes en una copia local del blog lo hagas.
Este sistema sólo sirve para bloquear comentarios hechos por bots, no va a parar ni el spam manual ni los trackbaks. Para los trackbacks yo te recomiendo cerrarlos para aquellas entradas de más de dos meses de antigüedad, es muy poco lo que pierdes ya que rara vez alguien va a añadir una referencia a algún artículo tuyo de hace más de dos meses. Para hacerlo puedes ir uno a uno por todos los post (opción lenta pero segura) o hacerlo de golpe mediante un query a la base de datos:

[sql]UPDATE `wp_posts` set `ping_status` = ‘close’
where `ping_status` = ‘open’
and `post_date` < (curdate() – 60)[/sql]

Como siempre que utilices los querys desde el mysql ten cuidado con lo que haces y preferiblemente haz una copia previa.

Durante mucho tiempo he tenido que mantener cerrados los comentarios de entradas antiguas para así tener una cantidad razonable de spam diario pero creo que, al menos por una temporada, podré olvidarme del spam, al menos en esta primera semana que llevo con ello instalado todo ha funcionado a las mil maravillas. La pega es que, al haber tocado los php de administración, al cambiar de versión de wordrpress es posible que pierdas todos estos cambios y tengas que rehacerlo.

Casi todo sacado de Sigt

Anuncios

7 comentarios en “Reducir el spam en WordPress

  1. A mi también pero ¿nunca te ha clasificado un comentario ‘bueno’ como spam? a mi alguna vez sí lo que me obligaba a revisarlo todos los días. Con esto sigo teniendo akismet (no sería demasiado complicado para un bot, detectar los cambios y cambiar su comportamiento para conseguir colarse) pero por ahora no ha entrado ninguno. Además akismet gasta recursos y así los para antes, cuanto más libre quede el servidor mejor.

  2. 3.200 millones de spams parados por el Akismet es una pasada, pero aquí ¡en Cantabria! existe un proyecto abierto (open source) similar, en el cual participo, que en 6 meses de vida ya ha parado 31 millones de spams en buzones de correo:

    http://www.hermes-project.com

    Es más una herramienta para gente que administra servidores que algo que pueda utilizar un usuario final, pero, hey, aquí en Cantabria también se hacen cosas buenas y que se usan internacionalmente 🙂

  3. Ya he oído hablar alguna otra vez del proyecto hermes y la verdad es que tiene buena pinta, a ver si os va bien con ello y se populariza.
    El spam es un problema serio que en ocasiones consigue que la gente abandone tecnologías (tan simples como el correo electrónico) por no tener que soportarlo.

  4. Pingback: Resumen de Octubre de 2007 | Dondado
  5. Pingback: WPtouch y antispam por campo oculto | Dondado

Los comentarios están cerrados.