Přeskočit navigaci

Tento blog byl již ukončen. Aktuální novinky ze světa Mozilly nyní hledejte na webu Mozilla.cz.

Ochrana phpBB proti spamerským robotům

Více méně z nutnosti již nějaký čas spravuji jedno webové fórum postavené na phpBB. Jedná se o celkem pěkný systém pro snadnou tvoru webového fóra bez nutnosti jakýchkoliv programátorských dovedností. Jelikož je hojně využíváno, je též často zneužíváno k různým aktivitám, které správci neradi vidí.

Zatímco proti hackování fóra se můžete bránit pravidelnou aktualizací, proti různým spamerským robotům je to již těžší. Spamerský robot si můžete představit jako jakýsi automat, který šmejdí po webu a hledá kde by prováděl svoji nekalou činnost. V případě phpBB se jedná o dva typy robotů. Před nedávnem jsem se jim trochu podíval na zoubek, protože mě řešení jejich následků jednoduše přestalo bavit.

První, budeme je nazývat třeba registrační roboti, nedělají nic jiného, než že si zaregistrují nějaký nesmyslný nick a tím jejich aktivita končí. Poznáte je snadno. Nicky takových uživatelských kont mají tvar nicku + nějaké to číslo – např. charlie1984. Dále mají většinou nastaven jako výchozí jazyk angličtinu či ruštinu. Hlavním ukazatelem je ale "uživatelova domovská stránka", která obsahuje odkaz na nějakou "super hyper xxx site".

Proč to roboti dělají? Důvod je vcelku jednoduchý. Fulltextové vyhledávače, jako například Google, procházejí jednotlivé webové stránky a indexují je. Výsledná kvalita zaindexované stránky je též mimo jiné počítána i na základě počtu odkazů, které na ni vedou, což má být jakýsi ukazatel kvality. Webové fórum postavené na phpBB je samozřejmě indexováno také, čehož roboti využívají a registrují nesmyslná konta. Obrana proti tomuto typu spamu je snadná – v nastavení fóra zapnete volbu Povolit visuální ověřování, čímž zajistíte, že pro dokončení registrace bude muset uživatel přečíst znaky z náhodně generovaného obrázku. To uživatel zvládne, robot nikoliv.

Druhý typ robotů se na nic neptá. Prostě rovnou do náhodné sekce fóra přidá příspěvek plný odkazů. Obranou může být povinná registrace, ale existují fóra, která se zabývají podporou nějakého produktu a tam je nutnost registrace nežádoucí. Proč by se měl uživatel, který chce položit jen jeden dotaz, registrovat? Proč by měl doplácet na chování automatických robotů? Tak přesně tento problém jsem řešil a řešení bylo vcelku snadné. Posuďte sami.

Vše, co potřebujete, je být chytřejší jak robot. Pokud ve fóru uživatel zadává příspěvek, jde přes formulář, kam jej zadá. Po odeslání se data z formuláře odešlou dalšímu skriptu k ověření jejich platnosti a následně jsou publikována. Robot na to jde jinak. Nějaký formulář? Nepotřebuje a pošle data přímo skriptu na zpracování. Toho lze velmi dobře využít.

V šabloně v cestě /templates/(jméno_vašeho_motivu)/posting_body.tpl přidejte jako součást vstupního formuláře další prvek, který bude skrytý a dejte mu nějakou výchozí hodnotu. V našem případě "test4321".

<input type="hidden" name="kontrola" value="test4321" />

Hodnotu tohoto formulářového prvku je po odeslání skriptem potřeba získat. V souboru posting.php vyhledejte řádek:

$message = ( !empty($HTTP_POST_VARS['message']) ) ? 
$HTTP_POST_VARS['message'] : ”;

Ten získává do proměnné $message text z hlavního pole formuláře. Pod tento řádek přidejte:

$kontrola = ( !empty($HTTP_POST_VARS['kontrola']) ) ? 
$HTTP_POST_VARS['kontrola'] : ”;

Tím získáte obsah vašeho skrytého prvku z formuláře. Kousek za tímto kódem naleznete volání funkce prepare_post, do níž zadejte proměnnou $kontrola jako další vstupní parametr (nejlépe jako poslední). Nyní si otevřete soubor /includes/functions_post.php, v něm vyhledejte hlavičku uvedené funkce a přidejte též jako poslední vstup proměnnou &$kontrola.

Nyní již zbývá jen odstavit robota. V tuto chvíli, pokud příspěvek přišel od fyzického uživatele, má proměnná $kontrola výchozí hodnotu z formuláře. Pokud se jedná o robota, nemá ji a postačí jakékoliv chybové hlášení přidat do proměnné $error_msg. Může to vypadat třeba následujícím způsobem.

if ($kontrola != "test4321") {
  $error_msg .= 'Pokud vidíte tuto zprávu, pak nastala 
chyba a informujte prosím správce fóra.';
}

Příspěvek nebude přidán a formulář se zobrazí znovu, aby uživatel zadal opravu, ale s tím si již robot neporadí. Pro kontrolu doporučuji nechat si zasílat všechny příspěvky, které neprojdou touto podmínku, na e-mail. Pro kontrolu, co kdyby.

Jaká je úspěšnost výše uvedeného způsobu? Z mého pozorování zatím 100%. Nezaznamenal jsem žádný spam od automatického robota, ani chybu, kdy by fyzický uživatel díky této ochraně nemohl odeslat svůj příspěvek. A o to přeci šlo, ne?

Aktualizace

Vše je jen otázkou času a jak jsem zjistil, objevili se roboti, kteří umí projít i výše uvedenou ochranu. Nejspíš dokáží vyplnit formulář a odeslat jej. Řešení tohoto problému může být dvojí:

  • Přejmenovat textarea, kam uživatel vkládá příspěvek. Prostě změnit hodnotu "name" (+ samozřejmě i v ověřovací části). Pokud to nezabere, vložit před ní další textarea s popiskem, že se sem nemá nic vpisovat a celé to skrýt pomocí CSS. Samozřejmě správnou textarea přejmenovat a tu fiktivní pojmenovat tak, jak se pole na zadání zprávy standardně jmenuje (atribut name). To by mělo robota zmást.
  • Pro anonymní přidávání příspěvků přidat combobox (výběrový seznam) s popisným textem "Publikovat příspěvek?" a možnostmi "ano" či "ne" s tím, že hodnota "ne" bude jako výchozí a uživatel bude muset zvolit hodnotu "ano". Řešení nikterak složité, ale robot si s ním neporadí.

Přečtěte si také:

Linkuj si ! asdf.sk

Komentáře

1. JayFinch
Chytre a jednoduche.

BTW kde presne v konfiguraci phpBB najdu "Povolit visuální ověřování"?

2. JasnaPaka
Je to primo v administracni casti pod Konfigurace tj. te stranky s vetsinou hlavnich predvoleb. Je to tam od verze 2.0.11. Starsi verzi dnes provozovat by byla docela vrazda.

3. Gioel
Sikovne :) vidno ze sa vyznas :)

4. Silver
Mám verziu 2.0.11 a vizuálne overovanie tam nie je. čo s tým?

5. Xsoft
No .. odpovedel sis sam ;)

6. Klinki
Prosim mohl bys mi poradit kam presne do /templates/(jméno_vašeho_motivu)/posting_body.tpl mam dat ten ? nakonec nebo kam ? Napis mi prosim radek predtim nebo tak...

7. JasnaPaka
Kamkoliv dovnitř formuláře. Každopádně před odesílací tlačítko.

8. Yawgmoth
ad vizuální ověřování - bohužel nezáleží jen na verzi phpbb, ale také na vzhledu, který používáte ...
v novém subSilver (defaultní vzhled) ta možnost je, ale pokud si po průběžných aktualizacích necháváte starý a zažitý vzhled, tak ta možnost v konfiguraci vůbec nebude

9. M4rekX
A proti Hackerom odporucam aby ste si dali najnovsiu verziu PHPBB cize phpbb 2.0.19 ;-)
+ MOD Cracker Tracker


10. Márty
Co je zač ten MOD Cracker Tracker??? A kde ho najdu??? Díky.

11. qaker
Powered by phpBB 2.0.19 &copy; tohle mam ale sem asi slepy a nikde tam nemuzu najit to "v nastavení fóra zapnete volbu Povolit visuální ověřování"

12. peter
Ani ja som to tlacitko nemohol najst je to preto ze pouzivas iny vzhlad fora ako je SubSilver a ten tuto moznost v sebe nema.

Zmen si vzhlad na subSilver nastav si "povoli visualne zobrazovanie" a zmen vzhlad naspet. :)

13. Jery (www)
Ahoj, chci se zeptat jestli máš zkušenosti s phpBB pod United Nuke, šel by tam Tvůj postup aplikovat?
phpBB je tam totiž jako modul, takže jeho root je ...portal/modules/forums
kdyby tě to zajímalo, moje icq je 1662804
Jery

14. JasnaPaka (www)
[13] Nenapadá mě důvod, proč by to nešlo. Jinak zkušenost nemam.

15. mattisse
kam mám vložit to chybové hlášení?asi do posting_body ale kam?

16. Medyn
Myslim si ze system jako je phpBB by s takovymi eventualitami mel kazdopadne pocitat a ne to nechat aby si to kazdy uzivatel resil po svem.. a nebo vlasten neresil, pokud to neni alespon pokrocily programator...

Přidat komentář

K tomuto příspěvku není možné přidávat další komentáře.