NoBot

Jednoduchá ochrana formulářů proti botům bez otravných CAPTCHA.

Co je NoBot?

NoBot je JavaScriptová knihovna pro ochranu formulářů proti automatizovaným útokům (botům), která nevyžaduje od uživatele rozpoznávání textu nebo obrázků jako tradiční CAPTCHA.

Honeypot

Neviditelné pole, které vyplní pouze boti

Časová kontrola

Ověření, že uživatel strávil na stránce minimální čas

JS Challenge

Token generovaný JavaScriptem (boti bez JS ho nemají)

Slider puzzle

Jednoduchý úkol - přetažení ikony

Ukázka

Takhle NoBot vypadá v akci:

Instalace

Stáhněte si soubor nobot.js a přidejte ho do své stránky:

<!-- Na konec stránky před </body> -->
<script src="/js/nobot.js"></script>
NoBot nemá žádné závislosti - používá Unicode znaky místo ikon.

Základní použití

1. Přidejte kontejner do formuláře

<form method="post" id="myForm">
  <!-- Vaše pole formuláře -->
  <input type="text" name="email" />
  <input type="password" name="password" />

  <!-- NoBot kontejner -->
  <div id="nobot-container"></div>

  <button type="submit" id="submitBtn" disabled>Odeslat</button>
</form>

2. Inicializujte NoBot

<script>
const nobot = new NoBot('nobot-container', {
  countdown: 5, // Odpočet v sekundách
  onReady: function() {
    // Aktivovat tlačítko po dokončení ověření
    document.getElementById('submitBtn').disabled = false;
  }
});
</script>

3. Validujte při odeslání

<script>
document.getElementById('myForm').addEventListener('submit', function(e) {
  const result = nobot.validate();

  if (!result.valid) {
    e.preventDefault();
    alert(result.error);
    return false;
  }
});
</script>

Konfigurace

Parametr Typ Výchozí Popis
countdown number 5 Počet sekund odpočtu před zobrazením slideru
sliderWidth number 280 Šířka slideru v pixelech
onReady function null Callback volaný po dokončení ověření
texts object - Vlastní texty (viz níže)

Vlastní texty

const nobot = new NoBot('container', {
  texts: {
    waiting: 'Ověření za {seconds} s...',
    ready: 'Přetáhněte ikonu doprava',
    success: 'Ověřeno',
    sliderError: 'Dokončete ověření přetažením'
  }
});

API

validate()

Ověří všechny kontroly a vrátí výsledek.

const result = nobot.validate();
// { valid: true/false, error: null/'Chybová zpráva' }

isReady()

Vrátí true pokud byl slider dokončen.

if (nobot.isReady()) {
  // Uživatel dokončil ověření
}

reset()

Resetuje NoBot do počátečního stavu (nový odpočet).

nobot.reset();

Server-side validace (volitelné)

NoBot automaticky přidává do formuláře skrytá pole, která můžete validovat na serveru pro dodatečné zabezpečení:

Pole Popis Validace
website_url Honeypot pole Musí být prázdné
nobot_token JS challenge token Musí existovat a mít délku > 10
nobot_ts Timestamp načtení stránky Rozdíl od aktuálního času > countdown
nobot_verified Slider dokončen Hodnota musí být "1"

Příklad v C# (ASP.NET Core)

public IActionResult OnPost()
{
  // Honeypot kontrola
  if (!string.IsNullOrEmpty(Request.Form["website_url"]))
    return BadRequest("Bot detected");

  // Slider kontrola
  if (Request.Form["nobot_verified"] != "1")
    return BadRequest("Verification not completed");

  // Časová kontrola
  if (long.TryParse(Request.Form["nobot_ts"], out var ts))
  {
    var elapsed = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds() - ts;
    if (elapsed < 3000) // méně než 3 sekundy
      return BadRequest("Too fast");
  }

  // ... zpracování formuláře
}

Stažení

Stáhnout nobot.js

Licence: NoBot je volně k použití pro osobní i komerční projekty.