Hack para Wordfence

  • Wordfence

Hack para Wordfence

Allá por el mes de julio os hablábamos de cómo mejorar considerablemente la seguridad de WordPress y de Wordfence, un magnífico firewall que nos ayuda, y mucho, a mejorar sensiblemente la seguridad de nuestros WordPress.

Pues bien, este estupendo plugin tiene un gran problema, reportado hace unos 5 meses y sin solución de momento, y es el crecimiento ilimitado de su log, concretamente de la tabla wp_wfHits (o el prefijo que le hayáis puesto a vuestra base de datos). En uno de nuestros blogs superaba los 750 MB de tamaño, por lo que la base de datos se había vuelto completamente inestable al superar los 1.4 GB de tamaño. Por ello hemos decidido poner coto a esta locura añadiendo un pequeño hack, muy similar al que utilizamos en hack para Twitter Widget Pro,  en nuestro archivo functions.php de nuestra plantilla, o plantilla hijo. Al final del mismo debemos insertar el siguiente código PHP:

//Hack para Wordfence
function WF_activation() {
    if ( ! wp_next_scheduled( 'WF_hack' ) ) { 
        wp_schedule_event( time(), 'daily', 'WF_hack' ); 
    }
}
add_action( 'wp', 'WF_activation' );

function WF_hack_daily() {
    global $wpdb;
    $wpdb->query( "TRUNCATE TABLE " . $wpdb->base_prefix . "wfHits" );
}
add_action( 'WF_hack', 'WF_hack_daily' );

De esta forma borrará el contenido de la tabla diariamente. Si la queremos limpiar semanalmente, como es nuestro caso, entonces tendremos que añadir este otro código en lugar del anterior:

//Añadir nuevo intervalo semanal
function WF_semanal( $schedules ) {
    $schedules['weekly'] = array(
        'interval' => 604800, // 1 week in seconds
        'display'  => __( 'Semanal' ),
    );

    return $schedules;
}
add_filter( 'cron_schedules', 'WF_semanal' );

//Hack para Wordfence
function WF_activation() {
    if ( ! wp_next_scheduled( 'WF_hack' ) ) { 
      wp_schedule_event( time(), 'weekly', 'WF_hack' ); 
   }
}
add_action( 'wp', 'WF_activation' );

function WF_hack_weekly() {
    global $wpdb;
    $wpdb->query( "TRUNCATE TABLE " . $wpdb->base_prefix . "wfHits" );
}
add_action( 'WF_hack', 'WF_hack_weekly' );

Con este simple y sencillo código nos vamos a ahorrar muchos problemas.

Esperamos que os resulte útil mientras el amigo Mark Maunder pone solución a este problema.

Actualización

Como habéis podido ver, si leéis inglés, Mark Maunder, creador del plugin, nos comenta que existe una función que se encarga diariamente de limpiar la tabla dejando los últimos 20.000 registros, cosa que conocíamos, sin embargo, tal y como le hemos comentado, tanto en nuestro caso, como en algún otro que hemos encontrado en algunos foros especializados, esta tabla crece y crece sin parar, a pesar de que existe la rutina diaria que ejecuta dicha función.

Mientras no encontremos el motivo que lleva a nuestra base de datos a engordar hasta la extenuación, mantendremos activo este pequeño hack.

En cuanto encontremos la solución, al menos a nuestro problema. Publicaremos un comentario con la misma.

Gracias Mark por tu interés y por tu gran trabajo.

2017-03-27T18:07:36+02:00 Viernes, 1 de Noviembre de 2013|Categorías: Art Project Group|Etiquetas: , , , , |2 comentarios

2 Comentarios

  1. mark m. Viernes, 1 de Noviembre de 2013 en 17:26- Responder

    Hi,

    Thanks for reporting this. Wordfence actually has a routine that cleans the wp_wfHits table. You’ll find it on line 133 of lib/wordfenceClass.php. This prunes the table leaving the 20000 most recent rows. It seems that the dailyCron for Wordfence is not running on your website to clean this table. If you post something on http://www.wordfence.com in our support forum I’d be happy to help you with this.

    Regards,

    Mark. Maunder
    Wordfence creator.

    • Art Project Group Viernes, 1 de Noviembre de 2013 en 19:09- Responder

      Thanks Mark for your information and for your superb plugin.

      Yes, there’s a clean routine on that line: $wfdb->queryWrite(“delete from $p”.”wfHits order by id asc limit ” . ($count – 20000));, and there’s a wordfence_daily_cron hook on my daily cron, but it doesn’t work, and I don’t know why.

      I think that the problem was on the engine of that table (InnoDB), but really I don’t why the wp_wfHits table reached that size (over 750 MB).

      I read on some threads that other users have similar problems and I wrote this little hack for fix that problem.

      When I know why I have this problem, I’ll report it to you.

      Meanwhile, I must use this hack 🙁

      Kind regards.

Deje un comentario

Comparte esto con un amigo