FastAPI 0.140.0-0.141.1 பதிப்புகளில், ஒரு route ஒரு response model இல்லாமல் வெறும் dictionary அல்லது list-ஐத் திருப்பிக் கொடுக்கும்போது, Pydantic-ன் Secret வகுப்புகளால் (classes) மறைக்கப்பட்ட உண்மையான மதிப்புகளை (raw values) வெளிப்படுத்தக்கூடும். இந்த கசிவு கடவுச்சொற்கள் (passwords), API சாவிகள் (API keys) அல்லது ஒரு டெவலப்பர் மறைக்க முயன்ற பிற முக்கியமான தகவல்களை (credentials) வெளிப்படுத்தக்கூடும்.
இந்த பிழை ஏன் முக்கியமானது
FastAPI ஒரு view function-ன் return type-ஐ ஆய்வு செய்வதன் மூலம் JSON responses-களை உருவாக்குகிறது. நீங்கள் ஒரு response model-ஐ வழங்கினால், FastAPI அந்த object-ஐ Pydantic-இடம் ஒப்படைக்கும்; அது SecretStr-ஐ "**********" என மறைத்துவிடும். பாதிக்கப்பட்ட பதிப்புகளில், framework-ஆல் built-in SecretStr வகையை மட்டுமே அடையாளம் காண முடிகிறது. நீங்கள் Secret-ஐ subclass செய்தாலோ (அல்லது ஒரு custom secret type-ஐ பயன்படுத்தினாலோ) மற்றும் அந்த object-ஐ ஒரு raw dict அல்லது list-க்குள் திருப்பிக் கொடுத்தால், FastAPI ஒரு பொதுவான object-to-dict மாற்றத்திற்கு (conversion) செல்லும். அந்த மாற்றம், உண்மையான ரகசிய மதிப்பைத் தாங்கியிருக்கும் private attribute-ஐ அணுகி, அதை மாற்றமில்லாமல் client-க்கு அனுப்பிவிடும்.
இந்த கசிவு மூன்று நிபந்தனைகளும் பூர்த்தியாகும் போது மட்டுமே நிகழும்:
- secret வகை Pydantic-ன்
Secretbase class-ஐ subclass செய்கிறது. - route ஒரு response model-ஐத் தகவல்படுத்தவில்லை (declare செய்யவில்லை).
- view அந்த ரகசியத்தை ஒரு சாதாரண
dictஅல்லதுlist-க்குள் திருப்பிக் கொடுக்கிறது.
உங்கள் ரகசியங்களை இன்று எவ்வாறு பாதுகாப்பது
- ரகசியங்களைக் கொண்ட தரவைத் திருப்பிக் கொடுக்கக்கூடிய ஒவ்வொரு endpoint-க்கும் ஒரு response model-ஐத் Declare செய்யவும். அதன் மூலம் FastAPI, Pydantic-ஐப் பயன்படுத்தி serialization செய்ய அனுமதிக்கும், இது மதிப்புகளைச் சரியாக மறைக்கும்.
- வெறும் containers-களைத் திருப்பிக் கொடுப்பதற்குப் பதிலாக, ரகசியங்களை ஒரு Pydantic
BaseModelfield-க்குள் வைத்துப் பயன்படுத்தவும். அந்த model-ன் field type ஒரு அங்கீகரிக்கப்பட்ட secret class ஆக இருந்தால், அது சரியான முறையில் கையாளப்படுவதை உறுதி செய்யும். - நீங்கள் தற்போதைய return style-ஐயே தொடர விரும்பினால், உங்கள் secret subclass-க்காக ஒரு custom JSON encoder-ஐப் பதிவு செய்யவும். அந்த encoder ரகசியத்தை மறைக்கப்பட்ட வடிவத்தில் (
"**********") திருப்பிக் கொடுக்க முடியும்.
தீவிரத்தன்மை மற்றும் சமூகத்தின் பதில்
இந்த சிக்கல் குறைந்த தீவிரத்தன்மை (low severity) கொண்டது. இது நிகழ ஒரு குறிப்பிட்ட setup தேவைப்படுகிறது, இருப்பினும், முக்கியமான தகவல்கள் (credentials) தற்செயலாக வெளிப்படுவது ஒரு ஆபத்தாகும், குறிப்பாக பொதுவான APIs அல்லது responses-களை log செய்யும் சேவைகளில் இது பெரும் பாதிப்பை ஏற்படுத்தும்.
முக்கியக் குறிப்பு: ஒரு response model-ஐத் தவிர்ப்பது, பாதுகாப்பிற்காக உருவாக்கப்பட்ட ஒரு secret wrapper-ஐ தரவு கசிவாக (data leak) மாற்றக்கூடும். FastAPI ஒரு built-in fix-ஐ வெளியிடும் வரை, முக்கியமான தகவல்களை மறைப்பதற்குத் தெளிவான response models அல்லது custom encoders-களைச் சேர்ப்பது ஒரு எளிமையான மற்றும் நம்பகமான வழியாகும்.
