જ્યારે કોઈ રૂટ (route) response model વગર સાદું dictionary અથવા list રિટર્ન કરે છે, ત્યારે FastAPI 0.140.0-0.141.1 Pydantic ના Secret ક્લાસ દ્વારા વ્યાપ્ત (wrapped) કાચા (raw) મૂલ્યોને જાહેર કરી શકે છે. આ લીકેજથી પાસવર્ડ, API કી અથવા ડેવલપર દ્વારા છુપાવવાનો પ્રયાસ કરાયેલ અન્ય કોઈપણ ક્રેડેન્શિયલ ખુલ્લું પડી શકે છે.
આ બગ (bug) શા માટે મહત્વનો છે
FastAPI વ્યુ ફંક્શનના રિટર્ન પ્રકારની તપાસ કરીને JSON રિસ્પોન્સ બનાવે છે. જો તમે response model આપો છો, તો FastAPI તે ઓબ્જેક્ટને Pydantic ને સોંપે છે, જે SecretStr ને "**********" તરીકે માસ્ક (mask) કરે છે. અસરગ્રસ્ત વર્ઝનમાં, ફ્રેમવર્ક ફક્ત બિલ્ટ-ઇન SecretStr પ્રકારને જ ઓળખે છે. જ્યારે તમે Secret નો સબક્લાસ (subclass) બનાવો છો (અથવા કસ્ટમ સિક્રેટ પ્રકારનો ઉપયોગ કરો છો) અને કાચા dict અથવા list ની અંદર ઓબ્જેક્ટ રિટર્ન કરો છો, ત્યારે FastAPI જનરિક ઓબ્જેક્ટ-ટુ-ડિક્ટ (object-to-dict) કન્વર્ઝનનો ઉપયોગ કરે છે. તે કન્વર્ઝન ખરેખર સિક્રેટ મૂલ્ય ધરાવતા પ્રાઇવેટ એટ્રિબ્યુટ (private attribute) સુધી પહોંચે છે અને તેને ક્લાયન્ટને કોઈપણ ફેરફાર વગર મોકલે છે.
લીકેજ ત્યારે જ થાય છે જ્યારે ત્રણેય શરતો પૂરી થાય:
- સિક્રેટ પ્રકાર Pydantic ના
Secretબેઝ ક્લાસનો સબક્લાસ હોય. - રૂટમાં response model જાહેર કરવામાં ન આવ્યું હોય.
- વ્યુ સાદા
dictઅથવાlistની અંદર સિક્રેટ રિટર્ન કરે છે.
આજે તમારા સિક્રેટ્સને કેવી રીતે સુરક્ષિત કરવા
- Response model જાહેર કરો: સિક્રેટ્સ ધરાવતો ડેટા રિટર્ન કરી શકે તેવા દરેક એન્ડપોઇન્ટ (endpoint) માટે response model જાહેર કરો. ત્યારબાદ FastAPI Pydicnt ને સિરિયલાઈઝેશન (serialization) હેન્ડલ કરવા દેશે, જે મૂલ્યોને યોગ્ય રીતે માસ્ક કરશે.
- સિક્રેટ્સને Pydantic
BaseModelફિલ્ડની અંદર રેપ (wrap) કરો: કાચા કન્ટેનર્સ રિટર્ન કરવાને બદલે સિક્રેટ્સને PydanticBaseModelફિલ્ડની અંદર રેપ કરો. મોડેલનું ફિલ્ડ પ્રકાર એ માન્યતા પ્રાપ્ત સિક્રેટ ક્લાસ હોઈ શકે છે, જે યોગ્ય હેન્ડલિંગ સુનિશ્ચિત કરે છે. - કસ્ટમ JSON એન્કોડર રજિસ્ટર કરો: જો તમારે વર્તમાન રિટર્ન સ્ટાઇલ જ રાખવી હોય, તો તમારા સિક્રેટ સબક્લાસ માટે કસ્ટમ JSON એન્કોડર (JSON encoder) રજિસ્ટર કરો. એન્કોડર માસ્ક કરેલ રજૂઆત (
"**********") રિટર્ન કરી શકે છે.
ગંભીરતા અને કોમ્યુનિટી પ્રતિસાદ
આ સમસ્યાની ગંભીરતા ઓછી છે. તેને ટ્રિગર કરવા માટે ચોક્કસ સેટઅપની જરૂર પડે છે, પરંતુ ક્રેડેન્શિયલ્સનું કોઈપણ અકસ્માતે એક્સપોઝર જોખમી છે, ખાસ કરીને પબ્લિક APIs અથવા રિસ્પોન્સ લોગ કરતા સર્વિસીસમાં.
Takeaway: response model ન રાખવાથી સિક્રેટ વ્રેપર ડેટા લીકનું કારણ બની શકે છે. FastAPI દ્વારા બિલ્ટ-ઇન ફિક્સ લાવવામાં આવે ત્યાં સુધી ક્રેડેન્શિયલ્સને છુપાવવા માટે સ્પષ્ટ response models અથવા કસ્ટમ એન્કોડર્સ ઉમેરવા એ સસ્તો અને વિશ્વસનીય રસ્તો છે.
