FastAPI 0.140.0-0.141.1 ভার্সনগুলোতে Pydantic-এর Secret ক্লাস দ্বারা আবৃত (wrapped) র (raw) মানগুলো প্রকাশ হয়ে যেতে পারে, যদি কোনো রুট রেসপন্স মডেল (response model) ছাড়াই একটি সাধারণ ডিকশনারি (dictionary) বা লিস্ট (list) রিটার্ন করে। এই লিক বা তথ্য ফাঁসের ফলে পাসওয়ার্ড, API কী, অথবা ডেভেলপার যে কোনো ক্রেডেনশিয়াল লুকিয়ে রাখার চেষ্টা করেছিলেন তা প্রকাশ হয়ে যেতে পারে।
কেন এই বাগটি গুরুত্বপূর্ণ
FastAPI একটি ভিউ ফাংশনের রিটার্ন টাইপ পরীক্ষা করার মাধ্যমে JSON রেসপন্স তৈরি করে। আপনি যদি একটি রেসপন্স মডেল প্রদান করেন, তবে FastAPI অবজেক্টটিকে Pydantic-এর কাছে পাঠিয়ে দেয়, যা SecretStr-কে "**********" হিসেবে মাস্ক (mask) করে দেয়। আক্রান্ত ভার্সনগুলোতে, ফ্রেমওয়ার্কটি শুধুমাত্র বিল্ট-ইন SecretStr টাইপটিকে চিনতে পারে। যখন আপনি Secret-এর একটি সাবক্লাস (subclass) তৈরি করেন (অথবা একটি কাস্টম সিক্রেট টাইপ ব্যবহার করেন) এবং একটি র (raw) dict বা list-এর ভেতরে অবজেক্টটি রিটার্ন করেন, তখন FastAPI একটি সাধারণ অবজেক্ট-টু-ডিক্ট (object-to-dict) কনভার্সনে ফিরে যায়। সেই কনভার্সনটি সরাসরি সেই প্রাইভেট অ্যাট্রিবিউটে পৌঁছে যায় যেখানে আসল সিক্রেট মানটি সংরক্ষিত থাকে এবং সেটি কোনো পরিবর্তন ছাড়াই ক্লায়েন্টের কাছে পাঠিয়ে দেয়।
তথ্য ফাঁস তখনই ঘটে যখন তিনটি শর্তই পূরণ হয়:
- সিক্রেট টাইপটি Pydantic-এর
Secretবেস ক্লাসকে সাবক্লাস করে। - রুটটি কোনো রেসপন্স মডেল ঘোষণা করে না।
- ভিউটি একটি সাধারণ
dictবাlist-এর ভেতরে সিক্রেটটি রিটার্ন করে।
আজ কীভাবে আপনার সিক্রেটগুলো সুরক্ষিত রাখবেন
- প্রতিটি এন্ডপয়েন্টের জন্য একটি রেসপন্স মডেল ঘোষণা করুন যাতে সিক্রেটযুক্ত ডেটা রিটার্ন করার সম্ভাবনা থাকে। এতে FastAPI, Pydantic-কে সিরিয়ালাইজেশন (serialization) করার সুযোগ দেবে, যা সঠিকভাবে মানগুলোকে মাস্ক করবে।
- র (raw) কন্টেইনার রিটার্ন করার পরিবর্তে সিক্রেটগুলোকে একটি Pydantic
BaseModelফিল্ডের ভেতরে রাখুন। মডেলের ফিল্ড টাইপটি একটি স্বীকৃত সিক্রেট ক্লাস হতে পারে, যা সঠিক হ্যান্ডলিং নিশ্চিত করবে। - যদি আপনাকে বর্তমান রিটার্ন স্টাইল বজায় রাখতে হয়, তবে আপনার সিক্রেট সাবক্লাসের জন্য একটি কাস্টম JSON এনকোডার রেজিস্টার করুন। এনকোডারটি মাস্ক করা রিপ্রেজেন্টেশন (
"**********") রিটার্ন করতে পারে।
গুরুত্ব (Severity) এবং কমিউনিটির প্রতিক্রিয়া
এই সমস্যাটির গুরুত্ব (severity) কম। এটি ট্রিগার করার জন্য একটি নির্দিষ্ট সেটআপের প্রয়োজন হয়, তবে ক্রেডেনশিয়ালের যেকোনো আকস্মিক প্রকাশ একটি ঝুঁকি, বিশেষ করে পাবলিক API বা এমন পরিষেবাগুলোতে যা রেসপন্স লগ (log) করে।
মূল কথা (Takeaway): রেসপন্স মডেল বাদ দিলে একটি সুপরিকল্পিত সিক্রেট র্যাপার (secret wrapper) ডেটা ফাঁসের কারণ হয়ে দাঁড়াতে পারে। FastAPI যতক্ষণ না একটি বিল্ট-ইন ফিক্স নিয়ে আসছে, ততক্ষণ ক্রেডেনশিয়ালগুলো লুকিয়ে রাখার জন্য স্পষ্ট রেসপন্স মডেল বা কাস্টম এনকোডার যোগ করা একটি সহজ এবং নির্ভরযোগ্য উপায়।
