FastAPI 0.140.0-0.141.1 Pydantic ਦੀਆਂ Secret ਕਲਾਸਾਂ ਦੁਆਰਾ ਲਪੇਟੇ ਗਏ (wrapped) ਕੱਚੇ ਮੁੱਲਾਂ (raw values) ਨੂੰ ਉਜਾਗਰ ਕਰ ਸਕਦਾ ਹੈ ਜਦੋਂ ਕੋਈ ਰੂਟ (route) ਰਿਸਪਾਂਸ ਮਾਡਲ ਤੋਂ ਬਿਨਾਂ ਇੱਕ ਸਾਧਾਰਨ ਡਿਕਸ਼ਨਰੀ (dictionary) ਜਾਂ ਲਿਸਟ (list) ਵਾਪਸ ਕਰਦਾ ਹੈ। ਇਹ ਲੀਕ ਪਾਸਵਰਡ, API ਕੀਜ਼, ਜਾਂ ਕੋਈ ਹੋਰ ਕ੍ਰੈਡੈਂਸ਼ੀਅਲ ਪ੍ਰਗਟ ਕਰ ਸਕਦਾ ਹੈ ਜਿਸ ਨੂੰ ਡਿਵੈਲਪਰ ਨੇ ਲੁਕਾਉਣ ਦੀ ਕੋਸ਼ਿਸ਼ ਕੀਤੀ ਸੀ।
ਇਹ ਬੱਗ ਕਿਉਂ ਮਹੱਤਵਪੂਰਨ ਹੈ
FastAPI ਇੱਕ ਵਿਊ ਫੰਕਸ਼ਨ (view function) ਦੇ ਰਿਟਰਨ ਟਾਈਪ ਦੀ ਜਾਂਚ ਕਰਕੇ JSON ਰਿਸਪਾਂਸ ਬਣਾਉਂਦਾ ਹੈ। ਜੇਕਰ ਤੁਸੀਂ ਇੱਕ ਰਿਸਪਾਂਸ ਮਾਡਲ ਪ੍ਰਦਾਨ ਕਰਦੇ ਹੋ, ਤਾਂ FastAPI ਉਸ ਆਬਜੈਕਟ ਨੂੰ Pydantic ਨੂੰ ਸੌਂਪ ਦਿੰਦਾ ਹੈ, ਜੋ SecretStr ਨੂੰ "**********" ਵਜੋਂ ਮਾਸਕ (mask) ਕਰ ਦਿੰਦਾ ਹੈ। ਪ੍ਰਭਾਵਿਤ ਵਰਜ਼ਨਾਂ ਵਿੱਚ, ਫਰੇਮਵਰਕ ਸਿਰਫ਼ ਬਿਲਟ-ਇਨ SecretStr ਟਾਈਪ ਨੂੰ ਹੀ ਪਛਾਣਦਾ ਹੈ। ਜਦੋਂ ਤੁਸੀਂ Secret ਦੀ ਸਬ-ਕਲਾਸ (subclass) ਬਣਾਉਂਦੇ ਹੋ (ਜਾਂ ਕਿਸੇ ਕਸਟਮ ਸੀਕਰੇਟ ਟਾਈਪ ਦੀ ਵਰਤੋਂ ਕਰਦੇ ਹੋ) ਅਤੇ ਇੱਕ ਕੱਚੀ ਡਿਕਟ (dict) ਜਾਂ ਲਿਸਟ ਦੇ ਅੰਦਰ ਆਬਜੈਕਟ ਵਾਪਸ ਕਰਦੇ ਹੋ, ਤਾਂ FastAPI ਇੱਕ ਜੈਨਰਿਕ ਆਬਜੈਕਟ-ਟੂ-ਡਿਕਟ (object-to-dict) ਕਨਵਰਜ਼ਨ ਦੀ ਵਰਤੋਂ ਕਰਦਾ ਹੈ। ਉਹ ਕਨਵਰਜ਼ਨ ਉਸ ਪ੍ਰਾਈਵੇਟ ਐਟਰੀਬਿਊਟ ਤੱਕ ਪਹੁੰਚ ਜਾਂਦਾ ਹੈ ਜਿਸ ਵਿੱਚ ਅਸਲ ਸੀਕਰੇਟ ਮੁੱਲ ਹੁੰਦਾ ਹੈ ਅਤੇ ਇਸਨੂੰ ਬਿਨਾਂ ਕਿਸੇ ਬਦਲਾਅ ਦੇ ਕਲਾਇੰਟ ਨੂੰ ਭੇਜ ਦਿੰਦਾ ਹੈ।
ਲੀਕੇਜ ਉਦੋਂ ਹੀ ਹੁੰਦੀ ਹੈ ਜਦੋਂ ਤਿੰਨੋਂ ਸ਼ਰਤਾਂ ਪੂਰੀਆਂ ਹੁੰਦੀਆਂ ਹਨ:
- ਸੀਕਰੇਟ ਟਾਈਪ Pydantic ਦੀ
Secretਬੇਸ ਕਲਾਸ ਦੀ ਸਬ-ਕਲਾਸ ਹੈ। - ਰੂਟ (route) ਰਿਸਪਾਂਸ ਮਾਡਲ ਨੂੰ ਡਿਕਲੇਅਰ ਨਹੀਂ ਕਰਦਾ ਹੈ।
- ਵਿਊ (view) ਇੱਕ ਸਾਧਾਰਨ
dictਜਾਂlistਦੇ ਅੰਦਰ ਸੀਕਰੇਟ ਵਾਪਸ ਕਰਦਾ ਹੈ।
ਅੱਜ ਆਪਣੇ ਸੀਕਰੇਟਸ ਨੂੰ ਕਿਵੇਂ ਸੁਰੱਖਿਅਤ ਰੱਖਣਾ ਹੈ
- ਹਰ ਉਸ ਐਂਡਪੁਆਇੰਟ (endpoint) ਲਈ ਇੱਕ ਰਿਸਪਾਂਸ ਮਾਡਲ ਡਿਕਲੇਅਰ ਕਰੋ ਜੋ ਸੀਕਰੇਟਸ ਵਾਲਾ ਡੇਟਾ ਵਾਪਸ ਕਰ ਸਕਦਾ ਹੈ। ਇਸ ਤੋਂ ਬਾਅਦ FastAPI, Pydantic ਨੂੰ ਸੀਰੀਅਲਾਈਜ਼ੇਸ਼ਨ (serialization) ਸੰਭਾਲਣ ਦੇਵੇਗਾ, ਜੋ ਮੁੱਲਾਂ ਨੂੰ ਸਹੀ ਢੰਗ ਨਾਲ ਮਾਸਕ ਕਰ ਦਿੰਦਾ ਹੈ।
- ਕੱਚੇ ਕੰਟੇਨਰਾਂ (raw containers) ਨੂੰ ਵਾਪਸ ਕਰਨ ਦੀ ਬਜਾਏ ਸੀਕਰੇਟਸ ਨੂੰ Pydantic
BaseModelਫੀਲਡ ਦੇ ਅੰਦਰ ਰੱਖੋ। ਮਾਡਲ ਦੀ ਫੀਲਡ ਟਾਈਪ ਇੱਕ ਪਛਾਣਿਆ ਹੋਇਆ ਸੀਕਰੇਟ ਕਲਾਸ ਹੋ ਸਕਦੀ ਹੈ, ਜੋ ਸਹੀ ਸੰਭਾਲ ਯਕੀਨੀ ਬਣਾਉਂਦੀ ਹੈ। - ਜੇਕਰ ਤੁਹਾਨੂੰ ਮੌਜੂਦਾ ਰਿਟਰਨ ਸਟਾਈਲ ਨੂੰ ਬਣਾਈ ਰੱਖਣਾ ਹੀ ਹੈ, ਤਾਂ ਆਪਣੀ ਸੀਕਰੇਟ ਸਬ-ਕਲਾਸ ਲਈ ਇੱਕ ਕਸਟਮ JSON ਐਨਕੋਡਰ (JSON encoder) ਰਜਿਸਟਰ ਕਰੋ। ਐਨਕੋਡਰ ਮਾਸਕਡ ਰਿਪ੍ਰਜ਼ੈਂਟੇਸ਼ਨ (
"**********") ਵਾਪਸ ਕਰ ਸਕਦਾ ਹੈ।
ਗੰਭੀਰਤਾ ਅਤੇ ਕਮਿਊਨਿਟੀ ਦੀ ਪ੍ਰਤੀਕਿਰਿਆ
ਇਹ ਮੁੱਦਾ ਘੱਟ ਗੰਭੀਰਤਾ (low severity) ਵਾਲਾ ਹੈ। ਇਸ ਨੂੰ ਟ੍ਰਿਗਰ ਕਰਨ ਲਈ ਇੱਕ ਖਾਸ ਸੈੱਟਅੱਪ ਦੀ ਲੋੜ ਹੁੰਦੀ ਹੈ, ਪਰ ਕ੍ਰੈਡੈਂਸ਼ੀਅਲਜ਼ ਦਾ ਕੋਈ ਵੀ ਅਣਜਾਣੇ ਵਿੱਚ ਹੋਣ ਵਾਲਾ ਉਜਾਗਰ ਇੱਕ ਜੋਖਮ ਹੈ, ਖਾਸ ਕਰਕੇ ਜਨਤਕ API ਜਾਂ ਉਹਨਾਂ ਸੇਵਾਵਾਂ ਵਿੱਚ ਜੋ ਰਿਸਪਾਂਸ ਨੂੰ ਲੌਗ (log) ਕਰਦੀਆਂ ਹਨ।
ਸਿੱਖਿਆ (Takeaway): ਰਿਸਪਾਂਸ ਮਾਡਲ ਨੂੰ ਛੱਡ ਦੇਣਾ ਇੱਕ ਚੰਗੀ ਨੀਅਤ ਵਾਲੇ ਸੀਕਰੇਟ ਵੈਪਰ (secret wrapper) ਨੂੰ ਡੇਟਾ ਲੀਕ ਵਿੱਚ ਬਦਲ ਸਕਦਾ ਹੈ। ਜਦੋਂ ਤੱਕ FastAPI ਇੱਕ ਬਿਲਟ-ਇਨ ਫਿਕਸ (built-in fix) ਨਹੀਂ ਲਿਆਉਂਦਾ, ਉਦੋਂ ਤੱਕ ਕ੍ਰੈਡੈਂਸ਼ੀਅਲਜ਼ ਨੂੰ ਲੁਕਾ ਕੇ ਰੱਖਣ ਲਈ ਸਪਸ਼ਟ ਰਿਸਪਾਂਸ ਮਾਡਲ ਜਾਂ ਕਸਟਮ ਐਨਕੋਡਰ ਜੋੜਨਾ ਇੱਕ ਸਸਤਾ ਅਤੇ ਭਰੋਸੇਮੰਦ ਤਰੀਕਾ ਹੈ।
