CWaptcha deploy'larında güvenlik en iyi uygulamaları ve kaçınılması gereken yaygın hatalar.
Prodüksiyonda RequireHttps: true ayarlayın. CWaptcha'nın HMAC'ı alan bütünlüğünü sağlar; ancak nonce ve fieldSalt aktarım sırasında TLS tarafından korunmalıdır. SubtleCrypto da güvenli bir bağlam (HTTPS veya localhost) gerektirir.
Varsayılan 300 saniyedir (5 dakika). Uzun TTL değerleri token hırsızlığı ve tekrar kullanım penceresini genişletir. Yüksek güvenlikli formlar (parola sıfırlama, ödeme) için 60–120 saniye düşünebilirsiniz.
Sticky session'sız bir yük dengeleyicinin arkasında çalışan her uygulamada AddCWaptcha() sonrasında .UseDistributedNonceStore() çağırın. Aksi takdirde bir düğümdeki nonce'lar diğerlerine görünmez.
Geliştirmede dotnet user-secrets, prodüksiyonda ortam değişkenleri kullanın. Commit edilmiş bir SecretKey, deponuzu okuyabilen herkesin geçerli CAPTCHA tokenleri oluşturmasına izin verir.
Yalnızca POST yolunu ProtectedPaths'e ekleyin (örn. "/Contact", "/Contact/Post" değil). Middleware yalnızca POST'u doğrular. GET'i korumak sayfanın yüklenmesini engeller.
Hız sınırlama (ASP.NET Core Rate Limiting middleware), girdi doğrulama ve sunucu tarafı kimlik doğrulama ile birleştirin. CWaptcha bot korumasıdır, her derde deva değildir.
Middleware ve özellik nonce'ı birlikte kullanır. Her ikisi de aynı istekte çalışırsa middleware nonce'ı tüketir ve özellik bunu zaten kullanılmış olarak görür — istek her zaman başarısız olur. Rota başına bir mekanizma seçin.
Her sayfa yüklemesi yeni bir nonce yayınlar. Tarayıcıda geri gidip form göndermek, zaten kullanılmış bir token kullanır. Bu tasarım gereğidir — tekrar saldırılarını önler.
Bellek içi durum işlem başınadır. Nonce'ı yayınlayan düğümden farklı bir düğüme gelen istek onu bulamaz. Bunun yerine UseDistributedNonceStore() kullanın.
Betik NuGet paketine gömülüdür ve middleware tarafından /cwaptcha/cwaptcha.js'den sunulur. Harici olarak barındırmak HMAC alan tuzu mekanizmasını bozar ve kendi barındırmalı güvenlik modelini ortadan kaldırır.
HTTP üzerinde fieldSalt düz metin olarak iletilir ve geçerli bir token oluşturmak için ele geçirilebilir. Prodüksiyonda her zaman HTTPS'i zorunlu kılın — RequireHttps: true ile veya ters proxy / IIS düzeyinde.