ਸੁਰੱਖਿਆ ਆਡਿਟ ਦੇ ਨਤੀਜੇ: ਮੈਨੂੰ ਸ਼ਰਮ ਕਿਉਂ ਆਈ
ਮੈਂ ਹਾਲ ਹੀ ਵਿੱਚ ਆਪਣੇ ਸਾਰੇ ਸਾਈਡ ਪ੍ਰੋਜੈਕਟਾਂ 'ਤੇ ਇੱਕ ਸੁਰੱਖਿਆ ਆਡਿਟ ਕੀਤਾ ਹੈ। ਇਸ ਵਿੱਚ ਮੇਰਾ FastAPI backend, Telegram bots, PWA, ਅਤੇ Streamlit ਐਪਸ ਸ਼ਾਮਲ ਹਨ।
ਮੈਨੂੰ ਲੱਗਦਾ ਸੀ ਕਿ ਮੇਰਾ ਕੋਡ ਸੁਰੱਖਿਅਤ ਹੈ ਕਿਉਂਕਿ ਮੈਂ ਸਾਵਧਾਨ ਸੀ। ਮੈਂ ਗਲਤ ਸੀ।
ਮੈਂ ਇਹ ਅਸਲ ਪ੍ਰੋਡਕਸ਼ਨ ਬੱਗ ਤੁਹਾਡੇ ਨਾਲ ਸਾਂਝੇ ਕਰ ਰਿਹਾ ਹਾਂ ਤਾਂ ਜੋ ਤੁਸੀਂ ਇਹਨਾਂ ਤੋਂ ਬਚ ਸਕੋ। ਇਹ ਕੋਈ ਸਿਧਾਂਤਕ ਚੈੱਕਲਿਸਟ ਨਹੀਂ ਹਨ। ਇਹ ਉਹ ਗਲਤੀਆਂ ਹਨ ਜੋ ਮੈਂ ਅਸਲ ਵਿੱਚ ਕੀਤੀਆਂ ਹਨ।
ਕੰਡੀਸ਼ਨਲ ਅਥੈਂਟੀਕੇਸ਼ਨ ਦਾ ਜਾਲ ਮੈਂ ਅਜਿਹਾ ਕੋਡ ਲਿਖਿਆ ਸੀ ਜੋ ਵੈਰੀਫਾਈ ਕਰਨ ਤੋਂ ਪਹਿਲਾਂ ਇਹ ਚੈੱਕ ਕਰਦਾ ਸੀ ਕਿ ਕੀ ਕੋਈ API secret ਮੌਜੂਦ ਹੈ। ਜੇਕਰ environment variable ਗੁੰਮ ਸੀ, ਤਾਂ ਚੈੱਕ ਪੂਰੀ ਤਰ੍ਹਾਂ ਸਕਿਪ ਹੋ ਜਾਂਦਾ ਸੀ। ਇਸਦਾ ਮਤਲਬ ਸੀ ਕਿ ਮੇਰੀ ਪੂਰੀ API ਜਨਤਾ ਲਈ ਖੁੱਲ੍ਹੀ ਸੀ। ਨਿਯਮ: ਜੇਕਰ ਕੋਈ secret ਗੁੰਮ ਹੈ, ਤਾਂ 500 error ਦੇ ਨਾਲ ਸਖ਼ਤੀ ਨਾਲ ਫੇਲ ਹੋ ਜਾਓ। ਅਥੈਂਟੀਕੇਸ਼ਨ ਨੂੰ ਕਦੇ ਵੀ ਸਕਿਪ ਨਾ ਕਰੋ।
Git History Leak ਮੈਂ ਇੱਕ ਵਾਰ ਤੇਜ਼ੀ ਨਾਲ ਟੈਸਟ ਕਰਨ ਲਈ ਇੱਕ API key ਨੂੰ hardcode ਕਰ ਦਿੱਤਾ ਸੀ। ਮੈਂ ਬਾਅਦ ਵਿੱਚ ਇਸਨੂੰ .env ਫਾਈਲ ਵਿੱਚ ਬਦਲ ਦਿੱਤਾ ਅਤੇ ਸੋਚਿਆ ਕਿ ਇਹ ਠੀਕ ਹੋ ਗਿਆ ਹੈ। ਪਰ Git ਸਭ ਕੁਝ ਯਾਦ ਰੱਖਦਾ ਹੈ। ਕੋਈ ਵੀ ਮੇਰੀ commit history ਵਿੱਚ ਉਹ key ਲੱਭ ਸਕਦਾ ਹੈ। ਨਿਯਮ: ਜੇਕਰ ਤੁਸੀਂ ਕੋਈ key commit ਕਰਦੇ ਹੋ, ਤਾਂ ਮੰਨ ਲਓ ਕਿ ਉਹ ਚੋਰੀ ਹੋ ਗਈ ਹੈ। ਇਸਨ
ਟੈਂਪਰੇਰੀ ਫਾਈਲ ਲੀਕ ਜੇਕਰ ਫਾਈਲ ਪ੍ਰੋਸੈਸ ਕਰਦੇ ਸਮੇਂ ਮੇਰਾ ਕੋਡ ਕ੍ਰੈਸ਼ ਹੋ ਜਾਂਦਾ ਹੈ, ਤਾਂ ਟੈਂਪਰੇਰੀ ਫਾਈਲ ਹਮੇਸ਼ਾ ਲਈ ਡਿਸਕ 'ਤੇ ਰਹਿ ਜਾਂਦੀ ਹੈ। ਇਸ ਨਾਲ ਸਪੇਸ ਬਰਬਾਦ ਹੁੰਦੀ ਹੈ ਅਤੇ ਸੰਵੇਦਨਸ਼ੀਲ ਡੇਟਾ ਲੀਕ ਹੋ ਜਾਂਦਾ ਹੈ। ਨਿਯਮ: ਇਹ ਯਕੀਨੀ ਬਣਾਉਣ ਲਈ ਕਿ ਗਲਤੀ ਹੋਣ 'ਤੇ ਵੀ ਫਾਈਲਾਂ ਡਿਲੀਟ ਹੋ ਜਾਣ,
try-finallyਬਲਾਕਾਂ ਦੀ ਵਰਤੋਂ ਕਰੋ।
ਮੇਰੀ ਨਵੀਂ ਲਾਜ਼ਮੀ ਚੈੱਕਲਿਸਟ:
ਕੋਡਿੰਗ ਤੋਂ ਪਹਿਲਾਂ:
• ਇੱਕ .gitignore ਬਣਾਓ
• ਇੱਕ .env.example ਬਣਾਓ
ਹਰ endpoint ਲਈ: • Authentication ਜੋੜੋ • Generic error messages ਦੀ ਵਰਤੋਂ ਕਰੋ • ਮਹਿੰਗੇ ਕੰਮਾਂ (expensive tasks) ਲਈ rate limits ਜੋੜੋ
Committing ਤੋਂ ਪਹਿਲਾਂ: • ਆਪਣੇ diff ਵਿੱਚ secrets ਲਈ ਸਕੈਨ ਕਰੋ
Deploying ਤੋਂ ਪਹਿਲਾਂ: • ਆਪਣੀਆਂ dependencies 'ਤੇ security audits ਚਲਾਓ
ਸੁਰੱਖਿਆ ਸਮੱਸਿਆਵਾਂ ਅਚਾਨਕ ਨਹੀਂ ਹੁੰਦੀਆਂ। ਇਹ "TODO" ਕੁਮੈਂਟਸ ਅਤੇ "temporary" ਫਿਕਸਾਂ ਕਾਰਨ ਹੁੰਦੀਆਂ ਹਨ ਜੋ ਹਮੇਸ਼ਾ ਲਈ production ਵਿੱਚ ਰਹਿ ਜਾਂਦੇ ਹਨ।
ਬੱਗ (bug) ਨੂੰ ਠੀਕ ਕਰਨਾ ਬੋਰਿੰਗ ਹੈ। ਸੁਰੱਖਿਆ ਉਲੰਘਣਾ (breach) ਨੂੰ ਠੀਕ ਕਰਨਾ ਮਹਿੰਗਾ ਹੈ।