CWaptcha kullanıcılara görünmezdir çünkü koruma tamamen kriptografik katmanda gerçekleşir — UI katmanında değil. Her form gönderiminde şunlar olur.
Sayfanız yüklendiğinde cwaptcha.js otomatik olarak GET /cwaptcha/issue çağırır. Sunucunuz dört değer içeren bir JSON yükü ile yanıt verir:
{
"captchaId": "a1b2c3...", // unique ID for this session
"nonce": "d4e5f6...", // 32-byte random hex
"token": "g7h8i9...", // HMAC of (captchaId|nonce|expiry|userAgent)
"fieldSalt": "j0k1l2..." // per-session key for client-side HMAC
}
Sunucu captchaId → { nonce, fieldSalt, expiry, used: false }'u yapılandırılabilir TTL ile depolar (varsayılan 5 dakika). fieldSalt, ana SecretKey'den türetilir ve asla anahtarın kendisi değildir.
Kullanıcı formu gönderdiğinde cwaptcha.js gönderme olayını yakalar ve:
Middleware (veya [CWaptchaValidation] özelliği), işleyiciniz çağrılmadan önce bu kontrolleri sırayla çalıştırır:
| Neden | Anlamı |
|---|---|
expired | Nonce bulunamadı, TTL doldu veya zaten kullanıldı |
replayed | Token ikinci kez gönderildi |
hash_mismatch | Alan HMAC'ı eşleşmiyor — form değiştirilmiş |
honeypot | Gizli alan dolduruldu — muhtemelen bot |
tampered | Token imzası geçersiz — token değiştirilmiş |
https_required | İstek HTTPS değil ve RequireHttps: true |