20. 2009

září

Obrana proti spamu v komentářích

Každý, kdo má svůj blog se už asi setkal s nějakým tím nevyžádaným komentářem. Když jsem si programoval svůj vlastní blog, říkal jsem si, „kde by se tak na mojem blogu vzal spam“, avšak v momentě kdy adresa blogu dosáhla PR1, objevila se hromada spamu a já musel uvažovat, jak se bránit.

Je samozřejmě spousta způsobů jak se bránit. Bohužel buďto ochrany otravují uživatele (captcha), nebo administrátora (schvalování komentářů). Pokusím se zde popsat několik možných způsobů a mé vlastní řešení spolu s implementací.

1. Captcha

Captcha je jeden z nejpoužívanějších způsobů ochrany. Jedná se o obrázek obsahující kombinaci čísel, písmen a nebo rovnou slov, která jsou však zkomolená aby se velice těžko četla. Opisování zkomolených znaků je však pro uživatele velice nepříjemné a obtížné. Poslední dobou se navíc objevují „sofistikovanější“ captchy, kdy máte vybrat různé obrázky nebo captchy absolutně nečitelné. Pověstnou se stala captcha, kterou svého času používal Rapidshare. (Cílem bylo vybrat 4 znaky, za kterými se schovávala kočka). Oblíbená je také reCaptcha, kterou docela nedávno odkoupila firma Google.

2. Počítání

Způsob, který jsem na svém blogu používal původně. Jednoduchý příklad ve stylu 3+2= dokáže relativně snadno a bez námahy spočítat každý. Bohužel větší problémy s těmito příklady nemají ani boti a tak jsem později přešel na verzi 3 krát 4, ale ani tato se mi příliš nelíbila. Opět se najdou i neskutečně sílené verze tohoto způsobu s jejíchž spočítáním by měl problém nejeden matematik. na druhou stranu proč ne? Aspoň by nepsal komentáře každý trotl :-)

3. Napsání slova

Jednoduchá a nenáročná ochrana stylem „jaký je dnes den“ nebo „jaké zvíře je na obrázku“. Vcelku účinná metoda vyžadující zamyšlení uživatele.

4. Schvalování komentářů

Způsob sice velmi účinný, ale opravdu náročný na administraci. Neustálé kontrolování administrace webu, jestli není nová žádost o přidání komentáře je opravdu opruzující.

5. Kontrola softwarem třetí strany

Podle mě jedna z nejlepších metod. Samozřejmě není tato metoda bezchybná, ale je nenáročná jak na uživatele (který použití ochrany nepozná) tak na administrátora (stačí jednou za čas zkontrolovat, zda nebyly označeny špatné komentáře). Pro ochranu na tomto blogu jsem proto zvolil Akismet. Dobře známá služba, kterou používá třeba populární WordPress v základní instalaci.

Akismet

Jak jsem slíbil, podíváme se na jednoduchý příklad použití Akismetu.

Nejprve je třeba stáhnout si knihovnu implementující API Akismetu. Já používám verzi pro PHP5.

Další důležitý krok je získat WordPress API klíč. Tento klíč získáte registrací na www.wordpress.com. Klíč by měl přijít v uvítacím e-mailu. Pokud již registraci máte, stačí se přihlásit do administrace → profil, kde svůj API klíč uvidíte.

A nyní samotné použití.

<?php
require dirname(__FILE__) . '/Akismet.php';

//nastavení - zadáme klíč a url webu
$WordPressAPIKey = '123456789012';
$MyBlogURL = 'http://opicinoviny.cz';

//vytvoříme instanci akismetu
$akismet = new Akismet($MyBlogURL ,$WordPressAPIKey);

//jméno/nick autora komentáře
$akismet->setCommentAuthor($jmeno);
//e-mail autora
$akismet->setCommentAuthorEmail($email);
//zadaná webová stránka
$akismet->setCommentAuthorURL($url);
//text komentáře
$akismet->setCommentContent($comment);
//stálý odkaz na článek
$akismet->setPermalink('http://opicinoviny.cz/obrana-proti-spamu-v-komentarich');

//pokud není spam
if(!$akismet->isCommentSpam())
  //pokud komentář není spam, uložíme ho do databáze
else
  // pokud je, opět ho uložíme do databáze (kvůli možnosti špatného označení) a označíme ho jako spam
?>

A to je vše. Třída ještě obsahuje metody na nahlášení špatného označení spamu

<?php
//nahlásit neoznačený spam
$akismet->submitSpam();

//nahlásit komentář, který byl nesprávně označen za spam
$akismet->submitHam();
?>

Tyto metody jsou však nepovinné, avšak pomáhají autorům zlepšovat algoritmy odhalování spamu.

Na konec ještě uvedu, že Akismet je možno používat zcela zdarma pro osobní blogy s nekomerčním využitím. Více v pravidlech na akismet.com

Jakou ochranu na svém webu používáte vy? Jaké s ní máte zkušenosti?

Komentáře

Zatím nebyl napsán žádný komentář. Můžeš být první!

 

Hledej