Bu kılavuz, bir Express.js sunucusuna iki Ribaunt CAPTCHA uç noktası eklemenize rehberlik eder: biri istemciye imzalı iş kanıtı challenge’ları yayınlar ve diğeri isteğe güvenmeden önce çözülmüş çözümleri doğrular. Her iki uç nokta da durumsuzdur — Ribaunt tüm challenge durumunu imzalı bir JWT içine kodlar, bu nedenle veritabanı gerekmez.
Önkoşullar
- Node.js 18 veya üzeri
- Projenizde
express ve ribaunt yüklü
- Güçlü, rastgele bir dizeye ayarlanmış bir
RIBAUNT_SECRET ortam değişkeni
En iyi uygulamalar
- Challenge uç noktasına oran sınırı uygulayın. Tek bir IP’nin dakikada kaç challenge isteyebileceğini sınırlamak için
express-rate-limit kullanın. Bu olmadan, bir saldırgan çevrimdışı kaba kuvvet saldırısı için token toplayabilir.
- Doğrulamayı bir oturuma bağlayın. Başarılı bir
verifySolution çağrısından sonra, imzalı bir JWT döndürün veya yalnızca HTTP çerezi ayarlayın. Bu tokeni korumalı form gönderim uç noktanızda zorunlu kılın, böylece CAPTCHA’nın aşağı akış isteğini yapan aynı kullanıcı tarafından çözüldüğünü bilirsiniz.
createChallenge çağrısı yapmadan önce girdileri doğrulayın. difficulty, amount veya ttlSeconds yapılandırmadan veya istek verilerinden geliyorsa, önce pozitif sonlu tamsayılar olduklarını kontrol edin — geçersiz değerler hata fırlatır.
- Çok örnekli veya sunucusuz dağıtımlar için
replayPrevention: 'remote' kullanın. Varsayılan 'local' deposu süreç başınadır, bu nedenle ayrı Node.js süreçleri arasındaki tekrar oynatmaları algılayamaz. Bir dağıtık depo adaptörü (örneğin Redis destekli) iletin ve verifySolution seçeneklerinde replayPrevention: 'remote' ayarlayın.
- Telemetri için
onWarning kullanın. onWarning geri çağrısı, türlenmiş bir reason ('invalid-token', 'expired-token', 'replay-detected' vb.) ve insan tarafından okunabilir bir message içeren yapılandırılmış bir VerifyWarning nesnesi alır. Üretimde ayrıntılı hata ayıklama günlüklerini etkinleştirmeden gözlemlenebilirlik hattınıza bağlayın.
createChallenge() işlevine iletmeden önce kullanıcı veya yapılandırma tarafından kontrol edilen difficulty, amount ve ttlSeconds değerlerini doğrulayın. Geçersiz değerler hata fırlatır.