ਮੈਂ ਆਪਣੇ ਸਾਈਡ ਪ੍ਰੋਜੈਕਟਾਂ ਦੀ ਸੁਰੱਖਿਆ ਲਈ ਆਡਿਟ ਕੀਤਾ — ਇੱਥੇ ਮੈਨੂੰ ਜੋ ਮਿਲਿਆ ਉਹ ਹੈ
ਮੈਂ ਹਾਲ ਹੀ ਵਿੱਚ ਆਪਣੇ ਸਾਰੇ ਸਾਈਡ ਪ੍ਰੋਜੈਕਟਾਂ ਦਾ ਆਡਿਟ ਕੀਤਾ। ਮੈਂ ਆਪਣੇ FastAPI backends, Telegram bots, ਅਤੇ web apps ਦੀ ਜਾਂਚ ਕੀਤੀ। ਮੈਨੂੰ ਲੱਗਦਾ ਸੀ ਕਿ ਮੈਂ ਸਾਵਧਾਨ ਹਾਂ।
ਮੈਂ ਗਲਤ ਸੀ।
ਮੈਨੂੰ ਅਸਲੀ ਬੱਗ ਮਿਲੇ ਜੋ ਮੈਂ ਅਸਲ ਵਿੱਚ production ਵਿੱਚ ਭੇਜ ਦਿੱਤੇ ਸਨ। ਇਹ ਕੋਈ ਸਿਧਾਂਤਕ ਸਮੱਸਿਆਵਾਂ ਨਹੀਂ ਹਨ। ਇਹ ਉਹ ਗਲਤੀਆਂ ਹਨ ਜੋ ਮੈਂ ਤੇਜ਼ੀ ਨਾਲ ਕੰਮ ਕਰਨ ਦੀ ਕੋਸ਼ਿਸ਼ ਕਰਦੇ ਸਮੇਂ ਕੀਤੀਆਂ ਸਨ।
ਇੱਥੇ ਉਹ ਮੁੱਖ ਸਮੱਸਿਆਵਾਂ ਹਨ ਜੋ ਮੈਨੂੰ ਮਿਲੀਆਂ ਅਤੇ ਉਹਨਾਂ ਨੂੰ ਕਿਵੇਂ ਸੁਧਾਰਨਾ ਹੈ:
- ਕੰਡੀਸ਼ਨਲ ਅਥੈਂਟੀਕੇਸ਼ਨ (Conditional Authentication) ਮੈਂ ਅਜਿਹਾ ਕੋਡ ਲਿਖਿਆ ਸੀ ਜੋ ਸਿਰਫ਼ ਉਦੋਂ ਹੀ API keys ਦੀ ਜਾਂਚ ਕਰਦਾ ਸੀ ਜੇਕਰ ਕੋਈ secret ਮੌਜੂਦ ਹੋਵੇ। ਜੇਕਰ ਮੈਂ ਆਪਣੇ environment ਵਿੱਚ secret ਸੈੱਟ ਕਰਨਾ ਭੁੱਲ ਗਿਆ, ਤਾਂ ਜਾਂਚ ਪੂਰੀ ਤਰ੍ਹਾਂ ਛੱਡ ਦਿੱਤੀ ਜਾਂਦੀ ਸੀ। ਇਸ ਨਾਲ ਮੇਰੀ API ਹਰ ਕਿਸੇ ਲਈ ਖੁੱਲ੍ਹੀ ਰਹਿ ਗਈ।
- ਸੁਧਾਰ: ਅਥੈਂਟੀਕੇਸ਼ਨ ਨੂੰ ਕਦੇ ਵੀ ਕੰਡੀਸ਼ਨਲ ਨਾ ਬਣਾਓ। ਜੇਕਰ secret ਗਾਇਬ ਹੈ, ਤਾਂ ਐਪ ਨੂੰ ਇੱਕ error ਦੇਣਾ ਚਾਹੀਦਾ ਹੈ ਅਤੇ ਰੁਕ ਜਾਣਾ ਚਾਹੀਦਾ ਹੈ।
- Git History ਵਿੱਚ Keys ਦਾ ਲੀਕ ਹੋਣਾ ਮੈਨੂੰ ਆਪਣੀ Git history ਵਿੱਚ ਪੁਰਾਣੀਆਂ API keys ਮਿਲੀਆਂ। ਮੈਂ ਬਾਅਦ ਵਿੱਚ ਉਹਨਾਂ ਨੂੰ .env ਫਾਈਲਾਂ ਵਿੱਚ ਬਦਲ ਦਿੱਤਾ ਸੀ, ਪਰ Git ਤੁਹਾਡੇ ਕੋਡ ਦੇ ਹਰ ਪੁਰਾਣੇ ਵਰਜ਼ਨ ਨੂੰ ਹਮੇਸ਼ਾ ਲਈ ਰੱਖਦਾ ਹੈ।
- ਸੁਧਾਰ: Git ਵਿੱਚ ਕਦੇ ਵੀ commit ਕੀਤੀ ਗਈ ਕਿਸੇ ਵੀ key ਨੂੰ ਖਤਰੇ ਵਿੱਚ ਮੰਨੋ। ਇਸਨੂੰ ਤੁਰੰਤ ਰੱਦ (revoke) ਕਰ ਦਿਓ। ਆਪਣੀ history ਸਾਫ਼ ਕਰਨ ਲਈ git-filter-repo ਵਰਗੇ ਟੂਲਸ ਦੀ ਵਰਤੋਂ ਕਰੋ।
- ਬਚੇ ਹੋਏ Debug Endpoints ਮੈਂ production ਵਿੱਚ ਅਜਿਹੇ endpoints ਛੱਡ ਦਿੱਤੇ ਸਨ ਜੋ ਮੇਰੀ database configuration ਅਤੇ system settings ਦਿਖਾਉਂਦੇ ਸਨ। ਇਹ development ਦੌਰਾਨ ਮਦਦਗਾਰ ਹੁੰਦੇ ਹਨ ਪਰ ਅਸਲ ਵਰਤੋਂ ਵਿੱਚ ਖ਼ਤਰਨਾਕ ਹਨ।
- ਸੁਧਾਰ: ਆਪਣੇ deployment checklist ਵਿੱਚ debug endpoint ਹਟਾਉਣ ਦਾ ਵਿਕਲਪ ਸ਼ਾਮਲ ਕਰੋ।
- ਵਧੇਰੇ ਜਾਣਕਾਰੀ ਵਾਲੇ Error Messages ਮੈਂ ਯੂਜ਼ਰ ਨੂੰ ਸਿੱਧੇ (raw) system errors ਵਾਪਸ ਭੇਜ ਰਿਹਾ ਸੀ। ਇਹ errors ਤੁਹਾਡੇ file paths, database types, ਅਤੇ library versions ਨੂੰ ਪ੍ਰਗਟ ਕਰਦੇ ਹਨ। ਇੱਕ Attacker ਇਸ ਡੇਟਾ ਦੀ ਵਰਤੋਂ ਤੁਹਾਡੇ ਸਿਸਟਮ ਨੂੰ ਨਿਸ਼ਾਨਾ ਬਣਾਉਣ ਲਈ ਕਰ ਸਕਦਾ ਹੈ।
- ਸੁਧਾਰ: ਆਪਣੇ ਲਈ ਅੰਦਰੂਨੀ ਤੌਰ 'ਤੇ (internally) ਪੂਰਾ error log ਕਰੋ। ਕਲਾਇੰਟ ਨੂੰ ਇੱਕ ਆਮ "Internal Server Error" ਸੁਨੇਹਾ ਵਾਪਸ ਭੇਜੋ।
- innerHTML ਰਾਹੀਂ XSS ਮੈਂ ਆਪਣੇ frontend ਵਿੱਚ user data ਨੂੰ ਰੈਂਡਰ ਕਰਨ ਲਈ innerHTML ਦੀ ਵਰਤੋਂ ਕੀਤੀ ਸੀ। ਇਹ attackers ਨੂੰ ਤੁਹਾਡੀ ਸਾਈਟ ਵਿੱਚ scripts ਇੰਜੈਕਟ ਕਰਨ ਦੀ ਇਜਾਜ਼ਤ ਦਿੰਦਾ ਹੈ।
- ਸੁਧਾਰ: ਹਮੇਸ਼ਾ data ਨੂੰ sanitize ਕਰੋ ਜਾਂ innerHTML ਦੀ ਬਜਾਏ textContent ਦੀ ਵਰਤੋਂ ਕਰੋ।
- Rate Limiting ਦੀ ਘਾਟ ਮੇਰੇ ਕੋਲ ਅਜਿਹੇ endpoints ਸਨ ਜੋ ਬਿਨਾਂ ਕਿਸੇ ਸੀਮਾ ਦੇ ਮਹਿੰਗੇ AI models ਨੂੰ ਕਾਲ ਕਰਦੇ ਸਨ। ਇੱਕ ਯੂਜ਼ਰ ਕੁਝ ਹੀ ਮਿੰਟਾਂ ਵਿੱਚ ਇੱਕ ਬਹੁਤ ਵੱਡਾ ਬਿੱਲ ਬਣਾ ਸਕਦਾ ਸੀ।
- ਸੁਧਾਰ: Authentication ਅਣਅਧਿਕਾਰਤ (unauthorized) ਯੂਜ਼ਰਾਂ ਨੂੰ ਰੋਕਦਾ ਹੈ। Rate limiting ਅਧਿਕਾਰਤ (authorized) ਯੂਜ਼ਰਾਂ ਨੂੰ ਤੁਹਾਡੇ ਸਿਸਟਮ ਦੀ ਦੁਰਵਰਤੋਂ ਕਰਨ ਤੋਂ ਰੋਕਦੀ ਹੈ। ਤੁਹਾਨੂੰ ਦੋਵਾਂ ਦੀ ਲੋੜ ਹੈ।
- Permissive CORS Settings
ਮੈਂ ਆਪਣੇ middleware ਵਿੱਚ
allow_origins=["*"]ਦੀ ਵਰਤੋਂ ਕੀਤੀ ਸੀ। ਇਹ ਕਿਸੇ ਵੀ ਵੈੱਬਸਾਈਟ ਨੂੰ ਤੁਹਾਡੀ API ਨੂੰ ਰਿਕਵੈਸਟ ਕਰਨ ਦੀ ਇਜਾਜ਼ਤ ਦਿੰਦਾ ਹੈ।
- ਸੁਧਾਰ: Production ਵਿੱਚ ਸਿਰਫ਼ ਆਪਣੇ ਖਾਸ domains ਨੂੰ ਹੀ ਇਜਾਜ਼ਤ ਦਿਓ।
- ਫਾਈਲ ਲੀਕੇਜ ਮੈਂ ਅਜਿਹਾ ਕੋਡ ਲਿਖਿਆ ਸੀ ਜੋ ਅਸਥਾਈ ਫਾਈਲਾਂ ਬਣਾਉਂਦਾ ਸੀ ਪਰ ਜੇਕਰ ਪ੍ਰੋਸੈਸ ਕ੍ਰੈਸ਼ ਹੋ ਜਾਂਦਾ ਸੀ ਤਾਂ ਉਹਨਾਂ ਨੂੰ ਡਿਲੀਟ ਕਰਨ ਵਿੱਚ ਅਸਫਲ ਰਿਹਾ। ਇਹ ਫਾਈਲਾਂ ਤੁਹਾਡੇ ਸਰਵਰ 'ਤੇ ਹਮੇਸ਼ਾ ਲਈ ਰਹਿ ਜਾਂਦੀਆਂ ਹਨ।
- ਸੁਧਾਰ: ਇੱਕ
try-finallyਬਲਾਕ ਦੀ ਵਰਤੋਂ ਕਰੋ ਤਾਂ ਜੋ ਇਹ ਯਕੀਨੀ ਬਣਾਇਆ ਜਾ ਸਕੇ ਕਿ ਜੇਕਰ ਕੋਈ ਗਲਤੀ ਆਉਂਦੀ ਹੈ ਤਾਂ ਵੀ ਫਾਈਲਾਂ ਡਿਲੀਟ ਹੋ ਜਾਣ।
ਸੁਰੱਖਿਆ ਸਮੱਸਿਆਵਾਂ ਬਹੁਤ ਘੱਟ ਹੀ ਜਾਣਬੁੱਝ ਕੇ ਹੁੰਦੀਆਂ ਹਨ। ਇਹ "ਮੈਂ ਇਸਨੂੰ ਬਾਅਦ ਵਿੱਚ ਠੀਕ ਕਰ ਲਵਾਂਗਾ" ਕਹਿਣ ਦਾ ਨਤੀਜਾ ਹੁੰਦੀਆਂ ਹਨ। ਉਹ 'ਬਾਅਦ' ਕਦੇ ਨਹੀਂ ਆਉਂਦਾ।
ਪਹਿਲੇ ਦਿਨ ਤੋਂ ਹੀ ਆਪਣੇ ਵਰਕਫਲੋ ਵਿੱਚ ਸੁਰੱਖਿਆ ਨੂੰ ਸ਼ਾਮਲ ਕਰੋ। ਕੋਡ ਨੂੰ ਕਮਿਟ ਕਰਨ ਅਤੇ ਡਿਪਲੋਏ ਕਰਨ ਤੋਂ ਪਹਿਲਾਂ ਇਸਦੀ ਜਾਂਚ ਕਰੋ।
ਸਰੋਤ: https://dev.to/justjinoit/i-audited-my-own-side-projects-for-security-issues-heres-what-i-found-1ahb