Jak jsem zastavil WordPress komentářový spam

Miluji téměř každou část práce technologického bloggera: učení, kázání, žertování, výzkum. Jedna část o blogování, kterou absolutně nesnáším: vypořádávání se s komentáři se SPAMem. Za poslední dva roky můj blog registroval 8 000+ SPAM komentářů denně. ZA DEN . Zahlcení mé databáze tím odpadem zpomaluje můj blog ve všech směrech a nedávno jsem se rozhodl, že s tím končím. Také mě unavovalo moderování komentářů a zobrazování spousty oznámení o komentářích ve spamu ve své e-mailové schránce. Hotovo. A jako šéf...přestal jsem to. Mrtvý. Tady je návod, jak jsem to udělal!

Jak jsem dostával spam

Nedá se to říct, ale mám podezření, že roboti zjistili, že mám blog WordPress, znal jsem klíče formuláře pro odesílání komentářů a podle toho to udělal. Dostával jsem komentáře pro Viagru, Cialis, Michael Kors, boty Nike a další. Věci, na kterých by trávili čas pouze roboti. Všechno to musel být detekovaný, automatizovaný útok – nic cíleného.

Co nefungovalo

Všechno. Používal jsem různé pluginy WordPress a nadále dostával SPAM. Akismet je předním ochráncem proti SPAMu na WordPressu a nedokázal zabránit problémům – a obsahoval více než 100 kB JavaScriptu, který zpomalil můj web. Nikdy jsem nepoužil obslužný program CAPTCHA, protože jakákoli překážka v komentování mého webu by měla být problémem, se kterým se potýkám, ne všichni z vás. Nakonec mě zklamaly četné utility. Byl jsem zklamaný, ale odmítl jsem se vzdát.

Co fungovalo

Prvním krokem bylo odstranění všech antispamových zásuvných modulů, protože existovala velká šance, že si mezi sebou pletly a pouštěly SPAM dovnitř.  Mým řešením bylo povolit obecné antispamové řešení: přidání INPUT do formuláře, který by měl zůstanou během procesu odesílání prázdné. Prázdná hodnota, ale přítomná prostřednictvím klíče: předpokladem je, že roboti, kteří čtou vstupy z formulářů, zaplní hodnoty pole formuláře nesmysly, jen aby se ujistili, že odeslání nebyla odmítnuta na základě prázdných hodnot.

Jak jsem implementoval ochranu proti spamu

Vstupy nelze jednoduše přidávat na straně serveru – jsou výstupem na stránku a robot je může číst a naplnit (nebo nenaplnit). Vytváření těchto polí na straně klienta eliminuje jednoduché čtečky bot / curl. Uvedená pole formuláře můžete přidat pomocí JavaScriptu (prostřednictvím jakéhokoli rámce) a to je vaše nejlepší sázka. Než to však uděláme, zavedeme kontrolu blokování SPAMu na straně serveru.

WordPress PHP

Před přijetím komentáře na straně serveru musíme zkontrolovat přítomnost dynamického klíče. Vše, co potřebujeme, je šek:

// Fuck off spammers
function preprocess_new_comment($commentdata) {
	if(!isset($_POST['is_legit'])) {
		die('You are bullshit');
	}
	return $commentdata;
}
if(function_exists('add_action')) {
	add_action('preprocess_comment', 'preprocess_new_comment');
}

Pokud kontrola selže, komentář odmítáme. Samozřejmě to znamená, že uživatelům bez podpory JavaScriptu budou jejich komentáře zamítnuty, ale šance na spam je pravděpodobně větší než u uživatelů bez podpory JS, takže mi to nevadí. Pokud klíč není nastaven, komentář rovnou zamítneme. To je samozřejmě šance, ale statistiky ukazují, že to stojí za to.

JavaScript

Snadnou odpovědí je použití základního JavaScriptu k vložení pole formuláře, a protože každý rámec JS má svou vlastní syntaxi, předám kód pro všechny z nich. Přidání uvedeného pole při načítání stránky mi připadá trochu podezřelé, protože to může zjistit inteligentní robot. V případě mého blogu používám MooTools a odesílám komentáře přes AJAX, takže při odeslání jednoduše přidám tajné pole do kódu JavaScript:

var form = $('comment-form');

new Request({
    url: form.action,
    method: 'post',
    onRequest: function() {},
    onSuccess: function(content) {},
    onComplete: function() {}
}).send(form.toQueryString() + '&is_legit=1');

Přidání tohoto klíče při odeslání se zatím ukázalo jako bezpečné.

VÍTĚZÍ

Po dvou týdnech jsem obdržel 0 SPAMových komentářů. Nula. Žádný. Nula. Absolutní zip. Z více než 8 000 za den jsem se dostal na žádný. Lepší než Akismet, lepší než jakýkoli plugin. Vezměte prevenci proti spamu na WordPressu do svých rukou – použijte kouzlo na straně klienta s malou funkcí PHP, která vám usnadní život!