FastAPI 0.140.0-0.141.1 میں Pydantic کے Secret classes کے ذریعے چھپائے گئے اصل (raw) ویلیوز ظاہر ہو سکتے ہیں جب کوئی روٹ (route) بغیر کسی response model کے سادہ ڈکشنری (dictionary) یا لسٹ (list) واپس کرتا ہے۔ یہ لیکیج پاس ورڈز، API keys، یا کسی بھی دوسرے کریڈنشل کو ظاہر کر سکتی ہے جسے ڈویلپر نے چھپانے کی کوشش کی ہو۔

یہ بگ کیوں اہم ہے

FastAPI ایک ویو فنکشن (view function) کی ریٹرن ٹائپ کا معائنہ کر کے JSON رسپانسز تیار کرتا ہے۔ اگر آپ ایک response model فراہم کرتے ہیں، تو FastAPI اس آبجیکٹ کو Pydantic کے حوالے کر دیتا ہے، جو SecretStr کو "**********" کے طور پر ماسک کر دیتا ہے۔ متاثرہ ورژنز میں، فریم ورک صرف بلٹ ان SecretStr ٹائپ کو پہچانتا ہے۔ جب آپ Secret کی سب کلاس (subclass) بناتے ہیں (یا کوئی کسٹم سیکرٹ ٹائپ استعمال کرتے ہیں) اور اس آبجیکٹ کو ایک سادہ dict یا list کے اندر واپس کرتے ہیں، تو FastAPI ایک عام object-to-dict کنورژن کا سہارا لیتا ہے۔ وہ کنورژن اس پرائیویٹ ایٹریبیوٹ تک پہنچ جاتی ہے جس میں اصل سیکرٹ ویلیو موجود ہوتی ہے اور اسے بغیر کسی تبدیلی کے کلائنٹ کو بھیج دیتی ہے۔

لیکیج صرف تب ہوتی ہے جب تینوں شرائط پوری ہوں:

  • سیکرٹ ٹائپ Pydantic کے Secret بیس کلاس کی سب کلاس ہو۔
  • روٹ میں response model کا اعلان نہ کیا گیا ہو۔
  • ویو سیکرٹ کو ایک سادہ dict یا list کے اندر واپس کرتا ہے۔

آج اپنے سیکرٹس کو کیسے محفوظ بنائیں

  • ہر اس اینڈ پوائنٹ (endpoint) کے لیے ایک response model کا اعلان کریں جو سیکرٹس پر مشتمل ڈیٹا واپس کر سکتا ہے۔ اس کے بعد FastAPI، Pydantic کو سیریلائزیشن (serialization) سنبھالنے دے گا، جو ویلیوز کو درست طریقے سے ماسک کر دیتا ہے۔
  • سادہ کنٹینرز واپس کرنے کے بجائے سیکرٹس کو Pydantic کے BaseModel فیلڈ کے اندر رکھیں۔ ماڈل کی فیلڈ ٹائپ ایک پہچانی جانے والی سیکرٹ کلاس ہو سکتی ہے، جو درست ہینڈلنگ کو یقینی بنائے گی۔
  • اگر آپ کو موجودہ ریٹرن اسٹائل ہی برقرار رکھنا ہے، تو اپنی سیکرٹ سب کلاس کے لیے ایک کسٹم JSON encoder رجسٹر کریں۔ انکوڈر ماسک شدہ نمائندگی ("**********") واپس کر سکتا ہے۔

شدت اور کمیونٹی کا ردعمل

یہ مسئلہ کم شدت (low severity) کا ہے۔ اسے ٹرگر کرنے کے لیے ایک مخصوص سیٹ اپ کی ضرورت ہوتی ہے، لیکن کریڈنشلز کا کوئی بھی حادثاتی انکشاف ایک خطرہ ہے، خاص طور پر پبلک APIs یا ایسی سروسز میں جو رسپانسز کو لاگ (log) کرتی ہیں۔

خلاصہ: Response model کو چھوڑ دینا ایک اچھے مقصد کے لیے بنائے گئے سیکرٹ ریپر (secret wrapper) کو ڈیٹا لیکیج میں بدل سکتا ہے۔ جب تک FastAPI کوئی بلٹ ان فکس جاری نہیں کرتا، تب تک واضح response models یا کسٹم انکوڈرز کا اضافہ کرنا کریڈنشلز کو چھپانے کا ایک سستا اور قابل اعتماد طریقہ ہے۔