Referer SPAM: Evitar bots y spammers
Lo prometido es deuda, y hace algunos días comenté que estaba probando un sencillisimo, pero creo que de momento efectivo repelente de bots spammers, sobre todo los famosos referers spammers entre los que se incluyen clásicos como el texas holdem, casino cash y tantos otros.
Un referer (o referido también llamado en español) es un dato que cada visitante deja al ingresar en un sitio web, dónde muestra desde que sitio web ha llegado. Asi, por ejemplo, al buscar una palabra en Google y pinchar en el primer enlace, el referer del que estamos hablando sería la página de Google.
Conociendo el significado de los referers, nos imaginaremos lo que es el referer spam: publicidad que dejan algunos robots/spammers dejando sus webs como referer a diestro y siniestro. Esto se ha convertido en un verdadero quebradero de cabeza para muchos autores de páginas webs, los cuales sufren tres factores: reducción del ancho de banda consumido por estos parásitos, spam en forma de comentario o mensaje enviado por metodo POST y referers falseados en sistemas de estadísticas, trackers u otros.
Por la red se encuentra bastante información sobre el asunto. Puedo resaltar algunos como Claudio, que comenta una forma de bloquear spam con el Apache. Alex habla de evitar el referer spam en Movable Type y en barrapunto se hicieron eco del tema hace ya varios meses.
El inconveniente de usar métodos cómo modificar configuraciones de Apache, uso de iptables o similares es que la mayoría de los usuarios no tienen dominio sobre estos aspectos o no pueden hacer cambios en ellos. Sin embargo, si lo podrían hacer con otros sistemas como el lenguaje PHP, con las cualidades necesarias de ser sencillo para editar, tener permiso y bloquear a estas especies de sanguijuelas.
La instalación y configuración del script es de lo más sencilla. Lo primero es descargar el script proteccion.php.txt, renombrarlo a proteccion.php e incluirlo en nuestro sitio web. Finalmente lo llamamos desde nuestra página principal en PHP en la primera linea con un sencillo:
include(‘proteccion.php’);
La explicación del código es sencilla. Nos basamos en el uso de PHP como lenguaje y de las expresiones regulares como arma. La variable spammers se encarga de recoger los dominios de los parásitos mientras que la variable referer es la que se encarga de comparar más tarde si el visitante es o no un spammer:
- Sencilla forma de ampliar la lista negra de parásitos.
- Esta lista solo influye en el nombre de dominio y subdominio del spammer. Asi pues un visitante que acceda desde la siguiente página web: http://www.miblog.com/articulo/el-poker-en-casinos no será bloqueado.
- Los dominios asignados sólo han sido .com y .net, ya que (al menos yo) de momento no he encontrado spammer desde otro.
- Simplificación y rápidez gracias al uso de expresiones regulares.
- Devuelve un código HTTP 404 error al visitante que es identificado como spammer. Esto es bastante interesante, ya que la mayoría de los bots hacen publicidad solo en los servidores que responden, eliminando a todos aquellos que devuelven un 404 error para no saturar su base de datos y no colapsar su sistema de peticiones sin sentido.
Esperemos que sirva de ayuda a mucha gente y podamos comentar todos los errores o modificaciones que pudieran hacer más interesante la protección.