Šuplík Honzy Hučína

Skok na navigaci (menu)

Tento blog je v současné době uzavřen.
Pokračování blogu na bloguje.cz jsem zrušil. Pokud budu někdy pokračovat, bude to spíš tady.

Jednotlivý článek

Internet a vše kolem
10. 7. 2006

Funkční javascriptová bariéra na komentářový spam

Zdá se, že ochrana proti komentářovému spamu, kterou zavedli administrátoři diskuse na Jak psát web, opravdu účinkuje. Při masivním útoku robotů v posledních dnech, na který si stěžoval například Jirka Chomát, jsem ji zkusil použít. Funguje. (Nezávisle na mně ji doporučují v komentářích i Dero a Jirka Macich.)

Ochrana je vlastně Kolumbovo vejce, razantní vylepšení známé metody. Tou metodou je jednoduchá otázka (nebo pokyn), kterou kladete návštěvníkům webu a na kterou živý člověk zná odpověď (robot ne). Třeba „Kolik je dvakrát tři?“ nebo „Které písmeno je na začátku abecedy?“. Příspěvek se zpracuje samozřejmě jen v případě, když je odpověď správná.

To má ale nevýhody:

  • otravuje to uživatele
  • nedá se použít tam, kde uživatelé nerozumějí česky (resp. jazyku, ve kterém je otázka)
  • je to příliš na očích

Nedalo by se to vyplňovat nějak automaticky a neviditelně? Kupodivu ukazuje se, že dalo. Rozumné prohlížeče dnes totiž umějí Javascript na úrovni, kterou roboti (zatím) nezvládají. Konkrétně jde o metodu getelementbyid.

Ochrana tedy funguje takto:

  1. Do formuláře pro zaslání příspěvku se přidá pole s ověřující otázkou.
  2. Poté se Javascriptem toto pole vyplní správnou odpovědí a zneviditelní.
  3. Uživatel, který má funkční Javascript, tedy ověřující pole nevidí a správná odpověď se odešle, aniž o tom ví.
  4. Robotu nebo uživateli, který má vypnutý či nedokonalý Javascript (což je dnes velmi malý podíl), se ověřující pole zobrazí a je na něm, aby odpověď zadal sám. Uživatel to zvládne, robot ne.

Zde je ukázka kódu:

<form action="zpracuj_komentar.php" method="post">
<!-- zde jsou normální pole formuláře -->
<p id="spamprotirobotum">
Ochrana proti spamu. Kolik je dvakrát tři? 
<input type="text" name="robot" value="" id="protirobotum">
</p>
<script>
/* tento skript vloží číslici do příslušného políčka automaticky */
document.getElementById("protirobotum").value="6";
document.getElementById("spamprotirobotum").style.display = "none";
</script>
<p><input type="submit" value="Odeslat"></p>
</form>

Serverový skript, který zpracovává data z formuláře, pak jenom zkontroluje, zda mu byla odeslána správná hodnota:

if ($_POST["robot"]*1==6)
// pridej prispevek

Jedinou potenciální slabinou je to, že v kódu je uvedena správná odpověď. Dá se tedy asi napsat robot, který ze zdrojáku javascriptu vyčmuchá, co má vyplnit. To mu lze ovšem zkomplikovat tím, že se neuvede konstanta (zde "6"), ale výraz, zde například 7–1 nebo Math.round(5.8).

Komentáře (počet: 56, poslední 28. 1. 2007, 20:50, nelze přidat komentář)
RSS komentářů tohoto článku
Trvalý odkaz

Poslední články:

Další články si můžete vyhledat v jednotlivých přihrádkách, případně podle data.

© Honza Hučín 2004–6

Šuplík běží na PIPNI.CZ. Díky!

sber.cermat.cz

RSS Šuplíku

RSS komentářů – souhrnně

U každého článku je samostatný RSS kanál pro komentáře.

Výběr článků

Posledních 10 článků

nebo podle data:

nebo hledání fulltextem:

Archiv všech článků

Poslední komentáře

Zabili mě, parchanti [2]

8. 8. 16:48 | Pepa

Cestou kolem blogu [2]

7. 8. 21:26 | Honza Hučín

Cestou kolem blogu [1]

7. 8. 21:02 | Honza

Vrtulník nad hlavou [3]

6. 8. 14:29 | Pepa

Taková hra na volby [1]

3. 8. 18:29 | Honza

Nejčtenější

Žádné údaje nejsou k dispozici.

O mně

*1967, absolvent MFF UK v Praze (1991)

statistik, analytik, programátor, učitel, hudebník

nyní Ústav pro informace ve vzdělávání

Životopis (RTF)

Napište mi