Web formlarında doğrulama: kullanıcı deneyiminden sunucuya
Giriş, yorum ve iletişim formlarını tasarlarken tarayıcı kontrolü, sunucu doğrulaması ve açık hata mesajlarını birlikte planlayın.
Bir form gönderiminin yaşamı
Alanlar
Açık etiketler ve gerekli bilgiler.
İlk kontrol
Tarayıcıda hızlı hata açıklaması.
Sunucu
Veriyi ve kullanıcının yetkisini doğrula.
Kayıt
Geçerli işlemi güvenli biçimde sakla.
Sonuç
Başarı bağlantısı veya düzeltilebilir hata.
Görsel, tarayıcı kontrolünün sunucu kontrolünün yerine geçmediğini gösterir.
Bir formun güzel görünmesi, doğru ve güvenli çalıştığı anlamına gelmez. Kullanıcı boş bir alanı fark edebilmeli, hatayı nasıl düzelteceğini anlayabilmeli ve gönderim sonucunu görebilmelidir. Aynı zamanda sunucu, tarayıcıdan gelen verinin kurallara uyduğunu bağımsız olarak kontrol etmelidir. Bu rehber, bir forumdaki konu oluşturma formunu örnek alarak temel düşünme biçimini anlatır. Tam bir güvenlik denetiminin yerine geçmez.
Her alanın bir amacı olsun
İlk soru hangi bilgiyi gerçekten toplamanız gerektiğidir. Konu başlığı, kategori ve mesaj yeterliyse telefon numarası istemeyin. Etiketleri alanların üzerinde görünür biçimde yazın; yalnızca kutunun içindeki soluk örneğe güvenmeyin. Örnek metin, kullanıcı yazmaya başlayınca kaybolur. Zorunlu alanları anlaşılır biçimde işaretleyin. Bir alanın neden istendiği belirsizse yanına kısa bir açıklama ekleyin.
Tarayıcıda erken geri bildirim verin
HTML'nin gerekli alan, tür ve uzunluk kontrolleri basit hataları hızlıca yakalamaya yardımcı olur. E-posta alanında uygun giriş türünü seçmek, mobil klavyeyi de kullanıcı için daha uygun hale getirebilir. Ancak kullanıcı henüz yazarken sürekli kırmızı uyarı göstermek yorucu olabilir. Hata durumunu, alan terk edildiğinde veya gönderim denendiğinde açıklamak çoğu senaryoda daha sakindir. Hatanın yanında çözümü de yazın: “Başlık en az beş karakter olmalı” gibi.
Sunucuda aynı kuralları yeniden uygulayın
MDN'nin form doğrulama rehberi, tarayıcı kontrollerinin güvenlik sınırı olmadığını açıkça belirtir. İstekler değiştirilebilir veya doğrudan gönderilebilir. Sunucu başlık uzunluğunu, izin verilen kategori değerlerini ve mesajın geçerliliğini kendisi denetlemelidir. Üyenin kimliği de formdaki gizli bir alandan alınmamalıdır. Yetki kararı doğrulanmış oturumdan gelmelidir. Kullanıcı kendi adını değiştirebilir; bu, başka bir üyenin kaydını düzenleme hakkı vermez.
Metin ile kodu ayırın
Yorum ve başlık gibi kullanıcı girdilerini varsayılan olarak metin kabul edin. Bir mesajın içindeki HTML veya komut parçalarını çalıştırmak, forum için gerekli değildir. Veritabanı erişiminde güvenli parametreli sorgular ve kullanılan çerçevenin korumaları tercih edilmelidir. HTML desteği gerçekten gerekiyorsa izin verilen öğeler için açık bir temizleme politikası kurun. Markdown kullanmak da kendi başına bütün güvenlik sorunlarını çözmez; bağlantıların ve üretilen HTML'nin nasıl işlendiğini kontrol edin.
Gönderim durumlarını tasarlayın
Kullanıcı düğmeye bastığında bir işlemin sürdüğünü görmelidir. Aynı mesajın yanlışlıkla iki kez gönderilmesini önleyen davranışlar düşünün. Sunucu yanıtı başarısız olduğunda yazılmış metni gereksiz yere silmeyin. Başarıda oluşturulan konuya bağlantı verin. Ağ kesintisi, oturumun bitmesi ve doğrulama hatası birbirinden farklı durumlardır; hepsine “Bir hata oluştu” yazmak, kullanıcının sonraki adımını belirsiz bırakır. Hata günlüğüne parola veya tam oturum bilgisi kaydetmeyin.
Küçük bir deneme listesi kullanın
Formu boş gönderin, çok uzun başlık deneyin, bilinmeyen kategori gönderin ve oturumu kapalıyken kayıt oluşturmayı deneyin. Klavyeyle alanlar arasında ilerleyin; hata açıklamasının okunabildiğini kontrol edin. Mobil ekranda düğmenin görünür kalmasına bakın. Son olarak iki ayrı kullanıcıyla, birinin diğerinin içeriğini değiştiremediğini doğrulayın. Bu testler formun işlevine dayanır; yalnızca ekrandaki güzel bir durumun tekrarını yapmaz. İyi form tasarımı, doğru girdiyi kolaylaştırır ve yanlış girdiyi hem anlaşılır hem kontrollü biçimde karşılar.
Son kontrolü telefonda da yapın. Klavye açıkken hata mesajı görünür mü, kullanıcı hangi alanı düzeltmesi gerektiğini anlayabilir mi, uzun bir metin kaybolmadan yeniden gönderilebilir mi? Formun yalnızca başarılı akışını görmek yeterli değildir; kullanıcının hatadan çıkabildiğini de gözlemleyin.