Neviditelností proti formulářovému spamu

Uvažujme, že máme registrační formulář:

<form action="/cesta_zpracovani" method="post">
  <p>
    <label for="user_name">Uživatelské jméno</label>
    <input type="text" id="user_name" name="user_name">
  </p>
  <p>
    <label for="email">Váš email</label>
    <input type="text" id="email" name="email">
  </p>
  <p>
    <input type="submit" value="Odeslat">
  </p>
</form>

Jak zabránit spamům, aby nám otravovali život, aniž bychom zatěžovali uživatele nějakou tou CAPTCHA ochranou?

Trik

Náš jednoduchý trik spočívá v tom, že přidáme do kódu další políčko, které nám poslouží jako past na spam boty.

<form action="/cesta_zpracovani" method="post">
  <p>
    <label for="user_name">Uživatelské jméno</label>
    <input type="text" id="user_name" name="user_name">
  </p>
  <p>
    <label for="email">Váš email</label>
    <input type="text" id="email" name="email">
  </p>
  <p id="very_important">
    <label for="comment">Nevyplňujte</label>
    <input type="text" id="comment" name="comment">
  </p>
  <p>
    <input type="submit" value="Odeslat">
  </p>
</form>

Pomocí CSS naši pastičku schováme před lidmi. Třeba takto:

#very_important
{
  overflow: hidden;
  position: absolute;
    left: -5000px;
  visibility: hidden; /* kvuli prepinani tabelatorem */
}

Pak už je to opravdu jednoduché. Jelikož lidé tohle políčko nevidí, nemohou ho vyplnit, kdežto spam boti jedou v kódu a budou se snažit přes něj protlačit svůj obsah. Nám už při zpracování formuláře jen zbývá zkontrolovat, jestli se něco chytlo do pastičky.

Nevýhody

Očividná nevýhoda je, že ať už z jakéhokoli důvodu návštěvník políčko uvidí, bude ho mást, dost možná ho vyplní a spadne nám do spamu. Pravděpodobnost dostatečně malá, abych ji byl ochoten podstoupit místo toho, abych zatěžoval uživatele CAPTCHAou (nebo jak by se to mělo psát).

12