lunes, 14 de octubre de 2013

Cómo eliminar el spam en foros phpBB

phpBB es un gran sistema de creación de foros. Tiene múltiples opciones de configuración, funciona bastante rápido, hay una buena cantidad de plantillas y tiene una comunidad enorme de usuarios. Todo ello con software libre y gratuito... ¿existe algún inconveniente?

Pues sí, uno muy importante que en muchos casos provoca que no haya más remedio que cerrar el foro que durante tanto tiempo hemos mantenido: el spam.

Si haces una búsqueda en internet de métodos para eliminar el spam encontrarás los clásicos, como fortalecer la contraseña, establecer captchas, cifrar el archivo que contiene las claves de acceso a la base de datos, filtrar direcciones y emails, etc. Sin embargo habrás comprobado que estos métodos apenas reducen la ingente cantidad de mensajes basura... ¿por qué?

Muy sencillo, a los vendedores de productos de dudosa legalidad no les interesa ir registrándose foro por foro anunciando sus productos. Eso es lento y pesado. Para ellos es mucho más fácil comprar una base de datos de direcciones de foros, comprar una aplicación pirata y en ella crear un mensaje con un anuncio, para que en cada uno de los foros de la base de datos se cree un usuario de forma automática y postee el mensaje en cada uno de los 1000, 10000 o 100000 foros. Con sólo hacer click en 'Enviar' de su aplicación se crearán miles de usuarios ficticios en miles de foros y se insertarán automáticamente miles de mensajes basura.

Es un sistema muy efectivo, ya que utilizan distintos 'hacks' poco conocidos de phpBB para registrarse utilizando una cadena de este tipo: http://www.forojemplo.es/ucp.php?mode=register&sid=ef2d8343918da15b0d0df78c05a1a82b

Esa URL, con el token adecuado, es estándar para todos los foros phpBB por lo que va a funcionar sin problemas y nosotros como administradores no nos podemos defender de un registro con un token SID correcto de un usuario que ni siquiera ha tenido que pasar por los captchas que le hayamos puesto.

La solución para nosotros es más fácil de lo que parece y va a eliminar el 100% del spam de nuestro foro. Consiste en modificar ligeramente el código fuente de nuestro foro, buscando la cadena 'register', que aparece en las URL relacionadas con el registro, por otra que sea por ejemplo "registrarse". De este modo cuando los hackers pulsen su botón mágico para autoregistrarse de miles de foros en el nuestro no va a funcionar porque la cadena que están introduciendo en nuestro foro no va a darles acceso, ya que estará utilizando una variable que nuestro foro no utiliza.

El cambio es muy sencillo. Tendremos que descargarnos a nuestro equipo el código fuente de nuestro foro, abrir algún programa que permita búsquedas en varios archivos a la vez, como por ejemplo el Sublime Text o el Notepad++ y hacer una búsqueda en la aplicación de la cadena 'register' y a continuación hacer una sustitución de esa cadena por otra, como por ejemplo: 'regtr', ' 'registrarse', 'alta' o similar. Esa cadena la encontraremos en varios archivos, como functions.php, ucp_register.php. Hablo de memoria pero creo que eran 3 archivos. Por supuesto no es necesario sustituir esta cadena en los archivos de idioma, sólo en lo que esté relacionado con el código de la aplicación. Esta cadena está asociada a la clave U_REGISTER y tiene un valor de tipo 'mode=register'.

Por ejemplo en el archivo functions.php nos encontramos la línea:
 4601:         'U_REGISTER'            => append_sid("{$phpbb_root_path}ucp.$phpEx", 'mode=register')

 Pues simplemente habría que cambiarla por:
 4601:         'U_REGISTER'            => append_sid("{$phpbb_root_path}ucp.$phpEx", 'mode=alta')


[EDIT] La lista de archivos modificados, si no se me olvida nada es:

/includes/functions.php, la línea 4601 de ese archivo queda así:
'U_REGISTER'     => append_sid("{$phpbb_root_path}ucp.$phpEx", 'mode=registro'),
/includes/ucp/ucp_register.php, en las líneas 132, 133, 137,149 y 471 hay que cambiar mode=register por mode=registro en cada una de ellas/ucp.php, la línea 61 hay que cambiarla por
case 'registro':
/viewonline.php, en la línea 289 también cambiamos la variable register por registro:
'mode=registro'     => 'VIEWING_REGISTER',



Después nos aseguraremos de que funcione todo bien en local (para ello antes deberíamos haber importado la base de datos a nuestro equipo) y si vemos que todo va bien subiríamos al servidor los archivos que hayamos modificado. Ni que decir tiene que es fundamentar tener una copia de seguridad de nuestros datos por si algo fuera mal.

Tras todo este proceso probaremos a registrarnos y así asegurarnos de que todo va bien. La ventaja de este truco es que podemos quitar tranquilamente nuestras medidas para el spam, como captchas, preguntas y respuestas, confirmación por email, etc. puesto que habremos solucionado el problema de raíz y de este modo es mucho más fácil el registro para el usuario.




7 comentarios:

  1. Este comentario ha sido eliminado por el autor.

    ResponderEliminar
  2. Este comentario ha sido eliminado por el autor.

    ResponderEliminar
  3. Hola, estoy muy interesado en el post que has escrito. Tengo un foro phpBB3 y muchos problemas con los spam.

    He instalado Captcha, preguntas....y nada.

    Me harias un favor si me dijeras los archivos en concreto donde tengo que rectificar el script.

    ResponderEliminar
  4. Hola.

    Esa variable aparece en bastantes ocasiones dentro del código fuente del programa y es fácil equivocarse al cambiarla porque sólo nos interesa modificarla en la pantalla inicial del registro del usuario.
    Ante todo hazte una copia de seguridad de esa carpeta, para no perder nada y asegúrate de que funcione todo en local.
    Te explico los pasos de cómo hacerlo con Sublime Text.

    1) Bájate el programa de http://www.sublimetext.com/
    2) Lo instalas y lo abres.
    3) Pulsa en File -> Open y abre algún archivo php de la carpeta de phpBB
    4) Ahora ve a Find -> Find in Files
    5) Abajo del todo activa los iconos Aa, "" para hacer una búsqueda literal.
    6) En el primer campo escribe: mode=register
    7) En el del medio escribe la ruta de la carpeta del phpBB (puedes pulsar en el icono de la derecha del campo para localizarla con el explorador de archivos). En el de abajo mejor no pongas nada porque creo que es mejor ir viendo línea por línea cómo lo sustituimos.
    8) Pulsa en Find
    9) Te aparecerán en una nueva pestaña todas las coincidencias de esa cadena en los archivos. Algunos los tenemos que reemplazar y otros no. Habría que reemplazarlo por mode=registro de forma manual en cada resultado.
    10) En mi caso los cambios que hice fueron en los archivos:

    /includes/functions.php, la línea 4061 de ese archivo queda así:
    'U_REGISTER' => append_sid("{$phpbb_root_path}ucp.$phpEx", 'mode=registro'),

    /includes/ucp/ucp_register.php, las líneas 132, 133, 137,149 y 471 hay que cambiar mode=register por mode=registro en cada una de ellas

    /ucp.php la línea 61 hay que cambiarla por
    case 'registro':

    /viewonline.php, en la línea 289 también cambiamos la variable register por registro:
    'mode=registro' => 'VIEWING_REGISTER',

    Quizá los números de línea no coincidan con los que tienes, creo que sí. También es posible que se me haya pasado algo. Estos cambios los hice hace varios meses y no apunté exactamente las líneas que modifiqué por falta de tiempo. Lo he revisado ahora pero no sé si me dejo algo.

    Si todo ha ido bien al abrir el foro te saldrá todo como siempre y cuando pulses en la opción de registrarse la url ahora será así: http://localhost/foro_prueba/ucp.php?mode=registro
    Prueba a registrar a un usuario nuevo y para ver si se registra sin problemas.
    En caso positivo ya puedes olvidarte para siempre de obligar a tus usuarios a usar capuchas, preguntas y respuestas, registros por email o similares porque el problema del spam habrá acabado de forma definitiva.

    Saludos.

    ResponderEliminar
  5. Ya está!!! me ha ido perfecto.......solo una cosita. La línea del primer canvio no es correcta, la buena es la número 4601

    ResponderEliminar