FastAPI 0.140.0-0.141.1 sürümleri, bir rota bir response model olmadan düz bir sözlük (dictionary) veya liste döndürdüğünde, Pydantic'in Secret sınıfları tarafından sarmalanmış ham değerleri açığa çıkarabilir. Bu sızıntı; parolaları, API anahtarlarını veya bir geliştiricinin gizlemeye çalıştığı diğer tüm kimlik bilgilerini ifşa edebilir.
Hatanın önemi
FastAPI, JSON yanıtlarını bir view fonksiyonunun dönüş tipini inceleyerek oluşturur. Eğer bir response model sağlarsanız, FastAPI nesneyi Pydantic'e devreder ve Pydantic de SecretStr değerini "**********" şeklinde maskeler. Etkilenen sürümlerde framework, yalnızca yerleşik SecretStr tipini tanır. Secret sınıfından bir alt sınıf oluşturduğunuzda (veya özel bir secret tipi kullandığınızda) ve nesneyi ham bir dict veya liste içinde döndürdüğünüzde, FastAPI genel bir nesneden-dict'e (object-to-dict) dönüşüm yöntemine geri döner. Bu dönüşüm, gerçek gizli değeri tutan özel (private) niteliğe ulaşır ve değeri istemciye değiştirilmeden gönderir.
Sızıntı yalnızca üç koşulun birden karşılanması durumunda gerçekleşir:
- Secret tipi, Pydantic'in
Secrettemel sınıfından türetilmişse (subclass). - Rota bir response model bildirmiyorsa.
- View, secret değerini düz bir
dictveyalistiçinde döndürüyorsa.
Gizli bilgilerinizi bugün nasıl korursunuz
- Gizli bilgiler içeren veriler döndürebilecek her uç nokta (endpoint) için bir response model tanımlayın. FastAPI, böylece değerleri doğru şekilde maskeleyen Pydantic'in serileştirme işlemini yapmasına izin verecektir.
- Ham kapsayıcılar döndürmek yerine, gizli bilgileri bir Pydantic
BaseModelalanı içinde sarmalayın. Modelin alan tipi, doğru işlenmeyi sağlayacak şekilde tanınan bir secret sınıfı olabilir. - Mevcut dönüş stilini korumak zorundaysanız, secret alt sınıfınız için özel bir JSON encoder kaydedin. Encoder, maskelenmiş temsili (
"**********") döndürebilir.
Şiddet düzeyi ve topluluk tepkisi
Sorun düşük şiddetlidir. Tetiklenmesi için belirli bir kurulum gerektirir, ancak kimlik bilgilerinin kazara ifşa edilmesi, özellikle halka açık API'lerde veya yanıtları günlüğe kaydeden (loglayan) servislerde bir risk teşkil eder.
Özet: Bir response model kullanmamak, iyi niyetle oluşturulmuş bir secret sarmalayıcıyı bir veri sızıntısına dönüştürebilir. FastAPI yerleşik bir düzeltme yayınlayana kadar, açıkça belirtilmiş response modelleri veya özel encoder'lar eklemek, kimlik bilgilerini gizli tutmanın ucuz ve güvenilir bir yoludur.
