Estructura de Pligg para evitar la publicación de noticias de spammers
De los CMS (gestores de contenido) que he utilizado Pligg, junto con Pixelpost aunque en menor medida, es de los que dan dolor de cabeza intentando eliminar los bot spammer que inyectan a través de SQL código en la página.
Una de las soluciones es dejar de publicar las páginas de registro register_center.tpl y register_step_1.tpl (pueden tener otro nombre dependiendo de la plantilla, en mi caso con quitar el enlace que apunta a la página de registro del archivo /mitemplate/includes/page_navigation.tpl sería suficiente), otra sería renombrar el archivo register.php según el método que se explica en esta página: "Rename the Register.php File", que dicho sea de paso a mi no me ha funcionado.
Para no enrollarme más detallo la estructura que tengo ahora mismo en mi página hecha con Pligg y que ha evitado la publicación de noticias de spammers:
1) Renombrar el prefijo de las tablas de la base de datos pligg_ a cualquier otro nombre (Aquí un método que yo he utilizado: "Renombrar varias tablas en mysql". Otro método: "Como cambiar el nombre de una tabla de tu base de datos mySQL en phpMyAdmin").
2) En el archivo .htaccess incluir estas dos líneas:
php_flag expose_php off
php_flag allow_url_fopen off
O bien (depende del servidor):
php_value expose_php off
php_value allow_url_fopen off
3) En el archivo bannedips.txt incluir esta dirección IP 127.0.0.1 , que es la del localhost que atiende las peticiones a la base de datos MySql.
Actualización: Introducir un campo de comprobación en el formulario de registro
En este hilo del antiguo foro de Pligg el usuario dracek da una solución que he probado desde hace una semana y se me ha reducido el spam casi a cero.
Como la mayoria de los bot spammers están automatizados para actuar sobre los campos predeterminados del formulario de registro de Pligg, sólo hay que añadir un campo adicional en el formulario de inscripción con una simple pregunta "antibot" así que edito register.php y register_center.tpl e incluyo estas líneas:
En el archivo nombre-template/register_center.tpl
{if isset($form_antibot_error)}{foreach value=error from=$form_antibot_error}
Justo debajo de la línea:
{if isset($form_email_error)}{foreach value=error from=$form_email_error}{$error}{/foreach}{/if}
Y
<li>
<label for="reg_antibot">Please write: <strong>antibot</strong></label>
<input type="text" id="reg_antibot" name="reg_antibot" value="{if isset($reg_antibot)}{$reg_antibot}{/if}" tabindex="40" maxlength="128" class="{if isset($form_antibot_error)}text_input_error{else}text_input{/if}" />
</li>
Justo encima de la línea:
{if isset($register_step_1_extra)}
En el archivo /register.php hay que modificar bastantes líneas, así que dejo el archivo completo para su lectura o descarga.
Cuando se valida siempre se recibirá un error si el campo antibot no esta completado con esa palabra.
Como siempre estas acciones deben ir acompañadas con otras medidas tomadas desde el servidor como un buen cortafuegos y los módulos de seguridad en Apache, pero fundamentalmente desde que he colocado en el archivo bannedips.txt la IP 127.0.0.1 no se han vuelto a producir una sola publicación de historias spam.