Trackback spam: ¡Solucionado!

Lo prometido es deuda. Hace unos días implementé una solución (entre comillas) para el spam en los trackbacks, que ya había comentado otras veces en este weblog. La idea viene de aquí. No lo he mostrado antes porque tenía que comprobar que funcionaba. Hasta hoy, ningún spam por trackback, que se suman a ningún spam por comentarios tras las mejoras que introduje en su día.

Estoy contento. Para aquellos que quieran aplicar la solución, he dejado un fichero diff en esta dirección. El parche, como regalo, contiene dos cosas:

* Una implementación del método anti-spam para trackbacks.
* Elimina el "rel=nofollow" de los enlaces (no estoy para nada de acuerdo con eso).

Instrucciones:

1. Descargar el fichero
2. Ir al directorio de wordpress (en mi distribución /usr/share/wordpress, y ejecutar:

patch -p1 < wp1 .5-trackback-anti-spam-diff.diff


Para los más intrépidos, por supuesto, hay otra opción:

links -source http://neuromancer.inf.um.es/blog/wp-files/wp1.5-trackback-anti-spam-diff.diff | patch -p1


Y he aquí el código cortesía de enscript. Como veis, utilizo la fecha con el comando date de PHP. Si queréis personalizar el cambio, podéis cambiar el formato de esa salida de date, por ejemplo incluyendo puntos en vez de "/":


diff -ur wordpress/wp-includes/comment-functions.php wordpress2/wp-includes/comment-functions.php
--- wordpress/wp-includes/comment-functions.php 2005-02-17 01:57:27.000000000 +0100
+++ wordpress2/wp-includes/comment-functions.php 2005-02-17 03:12:26.000000000 +0100
@@ -170,7 +170,7 @@
if ( empty( $url ) )
$return = $author;
else
- $return = "<a href='$url' rel='external nofollow'>$author</a>";
+ $return = "<a target=\"_blank\" href='$url' rel='external'>$author</a>";
return apply_filters('get_comment_author_link', $return);
}

@@ -302,7 +302,7 @@

function get_trackback_url() {
global $id;
- $tb_url = get_settings('siteurl') . '/wp-trackback.php?p=' . $id;
+ $tb_url = get_settings('siteurl') . '/wp-trackback.php/' . date("d/m/Y"). '/' . $id;

if ( '' != get_settings('permalink_structure') )
$tb_url = trailingslashit(get_permalink()) . 'trackback/';
diff -ur wordpress/wp-trackback.php wordpress2/wp-trackback.php
--- wordpress/wp-trackback.php 2005-02-17 01:57:27.000000000 +0100
+++ wordpress2/wp-trackback.php 2005-02-17 02:25:28.000000000 +0100
@@ -27,6 +27,10 @@
// trackback is done by a POST
$request_array = 'HTTP_POST_VARS';

+// Obligar a que la fecha sea la de hoy
+if (strpos($_SERVER['REQUEST_URI'], date("d/m/Y")) === false)
+ trackback_response(1, 'Sorry, bad trackback URL. Spam protection. Double-check your trackback URL.');
+
if (!$tb_id) {
$tb_id = explode('/', $_SERVER['REQUEST_URI']);
$tb_id = intval($tb_id[count($tb_id)-1]);


blog comments powered by Disqus