|
Srp
03
|
Jak bojovat proti strojům, které lidi naprogramovali k tomu, aby otravovali život jiným lidem? Jednoduše. Hlavou.
V tomto příspěvku si ukážeme, jak zabránit tzv. komentářovému spamování, tedy jinými slovy automatickému zahlcování internetových diskuzí nechtěnými komentáři, které zpravidla obsahují pouze komerční odkazy na “zaručeně neodolatelné” nabídky.
Principem řešení je předložit hloupému otravnému spamovacímu stroji (spambot) nějakou inteligentní překážku, při jejímž překonávání je nutné použít mozek. Nejlépe v přirozeném lidském jazyce, protože ten počítače prozatím rozluštit neumějí. Před přidáním komentáře do diskuse (do databáze) se tedy přispěvatele zeptáme na jednoduchou otázku: “Kolik je dvakrát tři?”. Pro lidský mozek triviální úloha, pro spamboty (zatím) neřešitelný oříšek.
Díky klientskému skriptování (JavaScript) dokonce ani lidského přispěvatele z masa a kostí nemusíme obtěžovat a vyplníme správný výsledek bez jeho přičinění a kupodivu i bez jeho vědomí (display:none). Samozřejmě, pokud bude mít v prohlížeči JavaScript vypnutý, bude tam tu šestku prostě muset napsat.
Před spuštěním INSERT dotazu do databáze se ujistíme, jestli v políčku pro správný výsledek je správný výsledek (tedy v našem případě číslo 6). Pokud ne, jedná se s největší pravděpodobností o spam a příspěvek tudíž ignorujeme a neinsertujeme.
Osobně toto řešení považuji za nejelegantnější, nejfikanější a nejúčinnější, narozdíl od jiných metod typu Captcha , mezikrok (jakože náhled) před finálním odesláním příspěvku, filtrování IP adres, filtrování zakázaných slov či analýza obsahu vkládaného textu (zjišťování počtu odkazů). Samozřejmě konečného rozhodnutí použít tu či onu metodu závisí na každém z vás.
<form action="zpracuj_komentar.php" method="post">
<p id="spamprotirobotum">
Ochrana proti spamu. Kolik je dvakrát tři?
</p>
<input name="robot" id="protirobotum" type="text" /><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>
<input value="Odeslat" type="submit" /> </form>if ($_POST["robot"]*1==6)
// pridej prispevek