Tarayıcı ve frontend
Formlar: istemci doğrulaması yardımcıdır, güvenlik değildir
Tarayıcıdaki kontrol kullanıcıyı hızlandırır; asıl doğrulama sunucuda tekrar yapılır.
Kavramı anlayalım
HTML formları type="email", required ve maxlength gibi niteliklerle temel doğrulamayı ücretsiz verir. JavaScript ile daha zengin kurallar eklenebilir: iki parolanın eşleşmesi, tarih aralığı gibi. Bu kontroller kullanıcıya anında geri bildirim verir ve gereksiz istekleri azaltır.
Ancak istemci tarafındaki her şey değiştirilebilir. Geliştirici araçları, curl veya bir betik formu tamamen atlayıp doğrudan API’ye istek atabilir. Bu yüzden aynı kurallar sunucuda tekrar uygulanır; ASP.NET Core’da bu model doğrulamasıyla yapılır ve hatalı istek controller’a ulaşmadan 400 ile döner.
İyi bir form deneyimi; etiketin alanın üstünde, hata mesajının alanın altında olmasını, hata olduğunda kullanıcının yazdıklarının silinmemesini ve sunucudan gelen alan bazlı hataların doğru alanın yanında gösterilmesini gerektirir. Gönderim sırasında düğme devre dışı bırakılarak çift gönderim de önlenir.
İki katmanlı doğrulama hem iyi kullanıcı deneyimi hem de güvenli veri sağlar.
Yalnız istemci tarafında doğrulama yapıp sunucunun gelen veriye güvenmesi.
Aynı konu. Üç farklı derinlik.
<label for="email">E-posta</label>
<input id="email" name="email" type="email" required autocomplete="email">Tarayıcı geçersiz e-postayı gönderimden önce yakalar.
Bu sayfa gerçek bir sunucuya veya veritabanına bağlanmaz. Kod örnekleri .NET 8, Next.js ve SQL Server için temsilîdir; süreler simülasyondaki örnek değerlerdir, ölçüm değildir. Örnekleri yalnız kendi geliştirme ortamında dene; gerçek bağlantı dizesi, token veya parola paylaşma.
Önce kendin dene.
Mesaj alanı istemcide en fazla 2000 karakterle sınırlı. Bir saldırgan 5 MB’lık mesaj gönderiyor. Hangi katmanlar bunu durdurmalı?
Çözümü ve açıklamasını göster
1) İstek boyutu sınırı (ör. [RequestSizeLimit] veya Kestrel MaxRequestBodySize)
2) Model doğrulaması: [MaxLength(2000)]
3) Veritabanı kolon sınırı: nvarchar(2000)Savunma katmanlıdır: büyük gövde okunmadan reddedilir, geçen veri doğrulanır, veritabanı son sınırı korur.