Input validation, bir REST API'nin güvenlik ve veri bütünlüğü açısından temel taşıdır. Doğrulama sayesinde geçersiz veya kötü niyetli verilerin sisteme girmesi engellenir, performans artar ve kullanıcı deneyimi iyileşir. Bu yazıda, etkili bir input validation stratejisi için pratik ipuçlarını ve kontrol listesini bulacaksınız.
Neden Input Validation? Güvenlik ve Veri Bütünlüğü
API’niz ne kadar karmaşık olursa olsun, doğrulanmamış girdiler en büyük güvenlik açıklarından biridir. SQL enjeksiyonu, XSS saldırıları veya mantıksal hatalar genellikle zayıf validasyondan kaynaklanır. Ayrıca, tutarlı doğrulama kuralları veritabanı bütünlüğünü korur ve hata ayıklamayı kolaylaştırır. Unutmayın: güvenilir bir API, girdileri asla körü körüne kabul etmez.
Temel Doğrulama Türleri
Etkili bir validasyon stratejisi, farklı doğrulama türlerini bir arada kullanmayı gerektirir. İşte en yaygın türler:
- Tip Kontrolü: Girdinin beklenen veri tipinde olduğundan emin olun (string, number, boolean, array vb.).
- Uzunluk ve Boyut Sınırları: String'ler için maksimum/minimum karakter, sayılar için aralık belirleyin.
- Format Doğrulaması: Email, URL, tarih gibi alanları regex veya özel kütüphanelerle kontrol edin.
- Zorunlu Alanlar: Gerekli alanların boş olmadığını doğrulayın.
- Mantıksal Tutarlılık: Başlangıç tarihinin bitiş tarihinden önce olması gibi kuralları kontrol edin.
- Kurumsal Kurallar: İş mantığına özgü doğrulamalar (örneğin, bir kullanıcının yalnızca bir aktif aboneliği olabilir).
Pratik İpuçları: Doğrulamayı Sağlamlaştırın
Aşağıdaki ipuçları, validasyon sürecinizi daha etkili ve yönetilebilir hale getirecektir.
- Sunucu Taraflı Validasyonu Asla Atlamayın: İstemci tarafı validasyon kullanıcı deneyimi için iyidir, ancak güvenlik için yeterli değildir. Tüm kritik doğrulamaları backend'de yapın.
- Şema Tabanlı Doğrulama Kullanın: JSON Schema veya benzer araçlar, tüm endpoint'lerinizde tutarlı ve yeniden kullanılabilir validasyon kuralları tanımlamanıza olanak tanır.
- İlk Hatada Durmayın: Mümkünse tüm validasyon hatalarını toplayıp tek bir yanıtta döndürün. Bu, istemcinin birden fazla istek yapmasını önler.
- Beyaz Liste Yaklaşımını Benimseyin: İzin verilen değerleri tanımlayın ve bunların dışındakileri reddedin. Kara liste yerine beyaz liste daha güvenlidir.
- Doğrulama Kütüphanelerinden Yararlanın: Kendi doğrulama mantığınızı yazmak yerine, topluluk tarafından test edilmiş kütüphaneleri (örn. Joi, Zod, Pydantic) kullanın.
- Hata Mesajlarını Anlamlı Hale Getirin: Hata yanıtlarında hangi alanın neden geçersiz olduğunu belirtin. Örneğin: "email alanı geçerli bir e-posta adresi olmalıdır."
- API Versiyonlamayı Unutmayın: Validasyon kuralları zamanla değişebilir. Mevcut istemcileri etkilememek için API versiyonlama stratejileri uygulayın.
Kontrol Listesi: Doğrulama Sürecinizde Neler Olmalı?
API geliştirme sırasında aşağıdaki maddeleri kontrol ederek validasyon kalitesini artırabilirsiniz:
- Her bir endpoint için gerekli tüm alanlar tanımlandı mı?
- Tip dönüşümleri güvenli bir şekilde yapılıyor mu (örn. string'den integer'a)?
- Enum alanlar için geçerli değerler listesi var mı?
- Girdi boyutları (string uzunluğu, dosya boyutu) sınırlandırıldı mı?
- Özel karakterler ve Unicode saldırıları (ZWNJ, sağdan sola işaret) kontrol ediliyor mu?
- Zorunlu alanlar boş bırakıldığında uygun hata kodu (400 Bad Request) dönüyor mu?
- Validasyon hataları standart formatta mı? Standart hata kodları ile uyumlu mu?
- Tüm validasyon kuralları belgelenmiş ve test edilmiş mi?
- Kurumsal kurallar (örneğin, ürün stoğu kontrolü) backend'de doğrulanıyor mu?
- Rate limiting ve diğer güvenlik önlemleri ile validasyon entegre mi?
Sık Yapılan Hatalar ve Kaçınılması Gerekenler
Input validation'da en sık karşılaşılan hataları bilmek, bunlardan kaçınmanıza yardımcı olur:
- Sadece İstemci Tarafında Validasyon Yapmak: Güvenlik açıklarına yol açar. Her zaman sunucu tarafında da doğrulayın.
- Hata Mesajlarında Aşırı Bilgi Vermek: Saldırganlara iç yapı hakkında ipucu vermekten kaçının. Örneğin "ID geçersiz" yerine "Geçersiz istek" deyin.
- Tüm Girdileri Aynı Anda Doğrulamak: Adım adım doğrulama yaparak hangi alanın sorunlu olduğunu netleştirin.
- Kuralları Güncellememek: İş gereksinimleri değiştikçe validasyon kurallarını da güncelleyin. Eski kurallar güvenlik açığı oluşturabilir.
- Dosya Yükleme Validasyonunu İhmal Etmek: Dosya türü, boyutu ve içeriği mutlaka kontrol edilmelidir.
Sonuç: Doğrulama, API Güvenliğinin İlk Savunma Hattıdır
Input validation, bir REST API'nin güvenilirliği ve güvenliği için vazgeçilmezdir. Bu yazıda paylaşılan ipuçları ve kontrol listesi, daha sağlam bir validasyon altyapısı kurmanıza yardımcı olacaktır. Unutmayın: her girdi güvenilir değildir. Doğrulama kurallarınızı düzenli olarak gözden geçirin, test edin ve güncel tutun. Güçlü bir validasyon stratejisi, API’nizi saldırılara karşı korurken kullanıcı deneyimini de iyileştirir.
Sık Sorulan Sorular
Input validation neden önemlidir?
Input validation, API'nize gelen verilerin beklenen formatta ve güvenli olduğundan emin olmanızı sağlar. Bu sayede SQL enjeksiyonu, XSS gibi saldırıları engeller, veri bütünlüğünü korur ve hataları erken yakalayarak kullanıcı deneyimini iyileştirir.
Hangi doğrulama türlerini kullanmalıyım?
Tip kontrolü, uzunluk sınırları, format doğrulaması (e-posta, URL), zorunlu alan kontrolü ve iş mantığına özgü kurallar en temel türlerdir. Ayrıca şema tabanlı doğrulama araçları (JSON Schema, Zod) ile tüm kuralları merkezi olarak yönetebilirsiniz.
Hata mesajlarını nasıl tasarlamalıyım?
Hata mesajları anlaşılır olmalı ancak iç yapı hakkında bilgi vermemelidir. Hangi alanın neden geçersiz olduğunu belirtin, standart HTTP hata kodlarını kullanın ve tüm hataları tek bir yanıtta toplayın.
İstemci tarafı validasyon yeterli midir?
Hayır, istemci tarafı validasyon yalnızca kullanıcı deneyimi için faydalıdır. Güvenlik için tüm doğrulamalar sunucu tarafında tekrar yapılmalıdır, çünkü istemci tarafı kolayca atlatılabilir.






