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:
<script src="/js/nobot.js"></script>
Základní použití
1. Přidejte kontejner do formuláře
<!-- 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
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í
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
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.
// { valid: true/false, error: null/'Chybová zpráva' }
isReady()
Vrátí true pokud byl slider dokončen.
// Uživatel dokončil ověření
}
reset()
Resetuje NoBot do počátečního stavu (nový odpočet).
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)
{
// 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
}