FastAPI 0.140.0-0.141.1 వెర్షన్లలో, ఒక రూట్ (route) రెస్పాన్స్ మోడల్ (response model) లేకుండా సాధారణ డిక్షనరీ (dictionary) లేదా లిస్ట్ (list)ను రిటర్న్ చేసినప్పుడు, Pydantic యొక్క Secret క్లాస్ల ద్వారా కప్పబడిన ముడి విలువలు (raw values) బయటపడే అవకాశం ఉంది. ఈ లీకేజీ వల్ల పాస్వర్డ్లు, API కీలు లేదా డెవలపర్ దాచాలని ప్రయత్నించిన ఇతర క్రెడెన్షియల్స్ (credentials) బయటపడవచ్చు.
ఈ బగ్ ఎందుకు ముఖ్యమైనది
FastAPI ఒక వ్యూ ఫంక్షన్ (view function) యొక్క రిటర్న్ టైప్ను పరిశీలించడం ద్వారా JSON రెస్పాన్స్లను నిర్మిస్తుంది. మీరు ఒక రెస్పాన్స్ మోడల్ను అందిస్తే, FastAPI ఆ ఆబ్జెక్ట్ను Pydanticకి పంపిస్తుంది, అది SecretStrను "**********" గా మాస్క్ చేస్తుంది. ప్రభావితమైన వెర్షన్లలో, ఫ్రేమ్వర్క్ కేవలం బిల్ట్-ఇన్ SecretStr టైప్ను మాత్రమే గుర్తిస్తుంది. మీరు Secretను సబ్-క్లాస్ చేసినప్పుడు (లేదా కస్టమ్ సీక్రెట్ టైప్ను ఉపయోగించినప్పుడు) మరియు ఆ ఆబ్జెక్ట్ను ఒక సాధారణ dict లేదా list లో రిటర్న్ చేసినప్పుడు, FastAPI సాధారణ ఆబ్జెక్ట్-టు-డిక్ట్ (object-to-dict) కన్వర్షన్కు వెళ్తుంది. ఆ కన్వర్షన్ అసలు సీక్రెట్ విలువను కలిగి ఉన్న ప్రైవేట్ ఆట్రిబ్యూట్ను చేరుకుని, దానిని ఎటువంటి మార్పు లేకుండా క్లయింట్కు పంపిస్తుంది.
ఈ లీకేజీ కేవలం ఈ మూడు షరతులు నెరవేరినప్పుడు మాత్రమే జరుగుతుంది:
- సీక్రెట్ టైప్ Pydantic యొక్క
Secretబేస్ క్లాస్ను సబ్-క్లాస్ చేసి ఉండాలి. - రూట్ (route) రెస్పాన్స్ మోడల్ను డిక్లేర్ చేయకూడదు.
- వ్యూ (view) ఆ సీక్రెట్ను ఒక సాధారణ
dictలేదాlistలో రిటర్న్ చేయాలి.
మీ సీక్రెట్లను ఈరోజే ఎలా రక్షించుకోవాలి
- సీక్రెట్లను కలిగి ఉండే డేటాను రిటర్న్ చేసే ప్రతి ఎండ్పాయింట్ (endpoint) కోసం రెస్పాన్స్ మోడల్ను డిక్లేర్ చేయండి. అప్పుడు FastAPI, Pydantic ద్వారా సీరియలైజేషన్ను (serialization) నిర్వహించేలా చేస్తుంది, ఇది విలువలను సరిగ్గా మాస్క్ చేస్తుంది.
- ముడి కంటైనర్లను (raw containers) రిటర్న్ చేసే బదులు, సీక్రెట్లను Pydantic
BaseModelఫీల్డ్లో ఉంచండి. మోడల్ యొక్క ఫీల్డ్ టైప్ ఒక గుర్తింపు పొందిన సీక్రెట్ క్లాస్ అయితే, అది సరైన హ్యాండ్లింగ్ను నిర్ధారిస్తుంది. - మీరు ప్రస్తుత రిటర్న్ స్టైల్నే కొనసాగించాలనుకుంటే, మీ సీక్రెట్ సబ్-క్లాస్ కోసం ఒక కస్టమ్ JSON ఎన్కోడర్ను (custom JSON encoder) రిజిస్టర్ చేయండి. ఆ ఎన్కోడర్ మాస్క్ చేసిన రూపాన్ని (
"**********") రిటర్న్ చేయగలదు.
తీవ్రత మరియు కమ్యూనిటీ స్పందన
ఈ సమస్య యొక్క తీవ్రత తక్కువ (low severity). ఇది సంభవించాలంటే ఒక నిర్దిష్ట సెటప్ అవసరం, కానీ క్రెడెన్షియల్స్ అనుకోకుండా బయటపడటం అనేది ప్రమాదకరమే, ముఖ్యంగా పబ్లిక్ APIలు లేదా రెస్పాన్స్లను లాగ్ (log) చేసే సర్వీసులలో.
ముఖ్య గమనిక (Takeaway): రెస్పాన్స్ మోడల్ను వదిలేయడం వల్ల, జాగ్రత్తగా రూపొందించిన సీక్రెట్ వ్యాపర్ కూడా డేటా లీక్గా మారవచ్చు. FastAPI అంతర్గత పరిష్కారాన్ని (built-in fix) విడుదల చేసే వరకు, క్రెడెన్షియల్స్ను దాచి ఉంచడానికి స్పష్టమైన రెస్పాన్స్ మోడల్లను లేదా కస్టమ్ ఎన్కోడర్లను జోడించడం అనేది ఒక సులభమైన మరియు నమ్మదగిన మార్గం.
