FastAPI 0.140.0-0.141.1 में, जब कोई रूट (route) बिना किसी response model के एक साधारण dictionary या list लौटाता है, तो Pydantic की Secret classes द्वारा रैप किए गए raw values उजागर हो सकते हैं। यह लीक पासवर्ड, API keys, या किसी भी अन्य क्रेडेंशियल को प्रकट कर सकता है जिसे एक डेवलपर छिपाने की कोशिश कर रहा था।

यह बग क्यों महत्वपूर्ण है

FastAPI एक view function के return type का निरीक्षण करके JSON रिस्पॉन्स बनाता है। यदि आप एक response model प्रदान करते हैं, तो FastAPI उस ऑब्जेक्ट को Pydantic को सौंप देता है, जो SecretStr को "**********" के रूप में मास्क कर देता है। प्रभावित वर्ज़न में, फ्रेमवर्क केवल बिल्ट-इन SecretStr टाइप को ही पहचानता है। जब आप Secret को subclass करते हैं (या किसी कस्टम सीक्रेट टाइप का उपयोग करते हैं) और ऑब्जेक्ट को एक कच्चे dict या list के अंदर लौटाते हैं, तो FastAPI एक जेनेरिक object-to-dict कन्वर्जन का सहारा लेता है। वह कन्वर्जन उस प्राइवेट एट्रिब्यूट तक पहुँच जाता है जिसमें वास्तविक सीक्रेट वैल्यू होती है और उसे बिना किसी बदलाव के क्लाइंट को भेज देता है।

लीकेज केवल तभी होता है जब तीनों शर्तें पूरी होती हैं:

  • सीक्रेट टाइप Pydantic की Secret बेस क्लास को subclass करता है।
  • रूट में response model घोषित नहीं किया गया है।
  • view एक साधारण dict या list के अंदर सीक्रेट लौटाता है।

आज अपने सीक्रेट्स को कैसे सुरक्षित रखें

  • प्रत्येक एंडपॉइंट के लिए एक response model घोषित करें जिसमें सीक्रेट्स वाला डेटा वापस आने की संभावना हो। इसके बाद FastAPI, Pydantic को serialization संभालने देगा, जो मानों को सही ढंग से मास्क कर देता है।
  • कच्चे कंटेनर्स लौटाने के बजाय सीक्रेट्स को Pydantic BaseModel फ़ील्ड के अंदर रैप करें। मॉडल का फ़ील्ड टाइप एक पहचाना जाने वाला सीक्रेट क्लास हो सकता है, जिससे उचित हैंडलिंग सुनिश्चित होती है।
  • यदि आपको वर्तमान रिटर्न स्टाइल को बनाए रखना ही है, तो अपने सीक्रेट subclass के लिए एक कस्टम JSON encoder रजिस्टर करें। एनकोडर मास्क किया हुआ प्रतिनिधित्व ("**********") लौटा सकता है।

गंभीरता और कम्युनिटी की प्रतिक्रिया

यह समस्या कम गंभीरता (low severity) की है। इसे ट्रिगर करने के लिए एक विशिष्ट सेटअप की आवश्यकता होती है, लेकिन क्रेडेंशियल्स का कोई भी आकस्मिक खुलासा एक जोखिम है, विशेष रूप से सार्वजनिक APIs या उन सेवाओं में जो रिस्पॉन्स को लॉग करती हैं।

निष्कर्ष (Takeaway): Response model को छोड़ देना एक अच्छे इरादे से बनाए गए सीक्रेट रैपर को डेटा लीक में बदल सकता है। जब तक FastAPI कोई बिल्ट-इन फिक्स नहीं लाता, तब तक स्पष्ट response models या कस्टम encoders जोड़ना क्रेडेंशियल्स को छिपाए रखने का एक सस्ता और विश्वसनीय तरीका है।