Categorie
Programmazione Wordpress

Usare Spam Karma 2 e WP-Cache assieme e senza problemi

Oggigiorno ormai lo spam sta diventando molto di più che un semplice problema reale. Basta avere un indirizzo di posta elettronica per rendersene conto: per bene che lo si custodisce prima o poi bisognerà affrontare la dura realtà della pubblicità indesiderata. Chi poi ha un sito/blog che permette l’interazione con gli utenti (qualcosa di vagamente web 2.0 insomma) è ancora più conscio del problema perchè per rendere credibile e “pulita” la propria creazione si deve affidare a soluzioni efficaci altrimenti vedrà riempirsi in poco tempo di spazzatura le proprie pagine web, cosa che è tutt’altro che piacevole ed auspicabile.

Fortunatamente per chi ha un blog in WordPress viene in aiuto Askimet che fa un ottimo lavoro. Resta comunque il problema, che man mano che passa il tempo si ingigantisce, di moderare e/o cancellare la spam che viene intrappolata nel filtro anti-spam. Per evitare di impiegare delle giornate in tale operazione si può utilizzare un sistema di protezione aggiuntivo che faccia uso di un codice di verifica, anche noto come captcha, ed in ultima analisi se proprio non se ne può fare a meno utilizzare un plugin aggiuntivo che aiuti Askimet nella sua durissima battaglia contro lo spam.

Io personalmente mi affido a Spam Karma 2 che si è rivelato finora un vero toccasana perchè mi ha risparmiato molto tempo nella moderazione dei commenti e soprattutto nella cancellazione dei messaggi di spam e dà quotidianamente una grossa mano ad Askimet facendo una serie di controlli aggiuntivi che impediscono che alcuni messaggi vengano inviati quindi debbano essere bloccati dal sistema anti-spam.

D’altro canto quando si incominciano ad avere grossi problemi di spam è sintomo che il numero dei visitatori sta aumentando ed il sito sta acquistando una certa popolarità. Questo vuol dire che il server verrà messo maggiormente “sotto stress” perchè dovrà fornire un numero maggiore di pagine e quindi se non si ha un servizio di hosting professionale se non addirittura un server virtuale o meglio ancora uno dedicato, si potranno verificare dei vistosi rallentamenti nel caricamento del sito. Ma anche per questo problema ci sono delle soluzioni. Non volendo andare troppo nel particolare una su tutte è il plugin WP-Cache che non fa altro che salvare le vostre pagine dinamiche in PHP, una volta che vengono viste e quindi create, in formato HTML (e quindi statiche) servendole poi ai successivi visitatori evitando così al server di dover ricreare sempre le stesse pagine ed evitando quindi che si affatichi troppo rallentando il vostro sito.

Il problema è che WP-Cache e Spam Karma 2 hanno qualche problema di convivenza. Ovvero se si utilizza il primo plugin il secondo incomincerà a classificare come spam anche messaggi che non lo sono per problemi vari di verifica dell’IP ed altri controlli che falliscono e quindi anche chi vorrebbe dire la sua per partecipare alla conversazione sul vostro blog verrà bloccato in modo del tutto involuto. Qualcosa di più dettagliato sul conflitto che c’è tra i due plugin lo si trova sul blog di Priv che presenta anche una parziale soluzione.

Ecco quello che ho fatto per far funzionare Spam Karma 2 e WP-Cache assieme e senza problemi, il tutto grazie alle indicazioni trovate sul blog di Priv e su D’ Technology Weblog.

Installazione di un plugin

Per prima cosa ho installato il plugin SK2-WP-Cache-Compatibility scaricabile dal seguente link, semplicemente scompattandolo e trascinandolo nella cartella sk2_plugins ed attivandolo dal pannello di controllo di Spam Karma 2

Modifica di SK2 e WP-cache

Sono andato nella cartella di Spam Karma 2 ed ho modificato il file SK2_payload_plugin.php e precisamente la funzione form_insert function come segue:

function form_insert($post_ID)
{
$seed = $this->get_option_value('secret_seed');
if (empty ($seed))
{
$seed = sk2_rand_str(10);
$this->set_option_value('secret_seed', $seed);
$this->log_msg(__("Resetting secret seed to: $seed."), 5);
}
$time = time();
$ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
//echo ("<!--#". $time . "#". $seed . "#". $ip ."#". $post_ID . "#-->"); // debug
$payload = md5($time . $seed . $ip . $post_ID);
echo "<!--mfunc cached_sk2_javascript_payload('".$seed."','".$post_ID."') -->";
echo "<input type=\"hidden\" id=\"sk2_time\" name=\"sk2_time\" value=\"$time\" />";
echo "<input type=\"hidden\" id=\"sk2_ip\" name=\"sk2_ip\" value=\"$ip\" />";
echo "<input type=\"hidden\" id=\"sk2_payload\" name=\"sk2_payload\" value=\"$payload\" />";
echo "<!--/mfunc-->";
}

Poi sono andato nella cartella di WP-Cache ed ho aggiunto al file wp-cache-phase1.php la seguente funzione:

function cached_sk2_javascript_payload($seed,$postid) {
$time = time();
$ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
$payload = md5($time . $seed . $ip . $postid);
echo "<!--cached--><input type=\"hidden\" id=\"sk2_time\" name=\"sk2_time\" value=\"$time\" />";
echo "<input type=\"hidden\" id=\"sk2_ip\" name=\"sk2_ip\" value=\"$ip\" />";
echo "<input type=\"hidden\" id=\"sk2_payload\" name=\"sk2_payload\" value=\"$payload\" />";
}

Ora sembra funzionare tutto correttamente e ogni volta che un utente invia un commento, se non è spam, compare subito automaticamente e la cache della pagina viene ricreata sul momento. Se c’è qualcosa di poco chiaro o volete aggiungere qualcosa come al solito sono qui ad ascoltarvi.

Rispondi