Ana içeriğe atla
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.