𝗡𝗶𝗹𝗶𝗶𝗳𝗮𝗻𝘆𝗶𝗮 𝗨𝗸𝗮𝗴𝘂𝘇𝗶 𝗠𝗶𝗿𝗮𝗱𝗶 𝗬𝗮𝗻𝗴𝘂 𝘆𝗮 𝗭𝗶𝗮𝗱𝗮 𝗸𝘄𝗮 𝗮𝗷𝗶𝗹𝗶 𝘆𝗮 𝗨𝘀𝗮𝗹𝗮𝗺𝗮 — 𝗛𝗮𝗽𝗮 𝗡𝗶𝗺𝗲𝗴𝘂𝗻𝗱𝘂𝗮 𝗡𝗶𝗻𝗶
Hivi karibuni niliifanyia ukaguzi miradi yangu yote ya ziada. Nilikagua mifumo yangu ya FastAPI backends, Telegram bots, na web apps. Nilidhani nilikuwa mwangalifu.
Nilikuwa nimekosea.
Niligundua hitilafu (bugs) halisi ambazo nilizituma kwenye uzalishaji (production). Hizi siyo matatizo ya kinadharia tu. Ni makosa niliyofanya wakati nikijaribu kufanya kazi kwa kasi.
Hapa kuna masuala makuu niliyoyapata na jinsi ya kuyarekebisha:
- Uthibitishaji wa Masharti (Conditional Authentication) Niliandika kodi ambayo ilikagua API keys tu ikiwa siri (secret) ilikuwepo. Ikiwa nilisahau kuweka siri hiyo kwenye mazingira yangu (environment), ukaguzi ulirukwa kabisa. Hii iliacha API yangu wazi kwa kila mtu.
- Rekebisho: Usifanye uthibitishaji uwe wa masharti kamwe. Ikiwa siri haipo, programu inapaswa kutoa kosa (error) na kusimama.
- Kuvuja kwa Funguo (Keys) kwenye Historia ya Git Nilipata API keys za zamani kwenye historia yangu ya Git. Nilikuwa nimezihamishia kwenye faili za .env baadaye, lakini Git huhifadhi kila toleo la zamani la kodi yako milele.
- Rekebisho: Chukulia funguo yoyote iliyowahi kuwekwa (committed) kwenye Git kama imevuja. Ibadilishe (revoke) mara moja. Tumia zana kama git-filter-repo kusafisha historia yako.
- Miisho (Endpoints) ya Debug Iliyobaki Niliacha endpoints kwenye uzalishaji (production) ambazo zilionesha usanidi wa hifadhidata (database configuration) na mipangilio ya mfumo. Hizi ni muhimu wakati wa maendeleo (development) lakini ni hatari ukiwa hewani.
- Rekebisho: Ongeza uondoaji wa debug endpoints kwenye orodha yako ya ukaguzi wa kuweka programu (deployment checklist).
- Ujumbe wa Makosa wenye Maelezo Mengi (Verbose Error Messages) Nilikuwa nikirudisha makosa ghafi ya mfumo (raw system errors) kwa mtumiaji. Makosa haya hufichua njia za faili (file paths), aina za hifadhidata, na matoleo ya maktaba (library versions). Mshambuliaji anaweza kutumia data hii kushambulia mfumo wako.
- Rekebisho: Rekodi (log) kosa lote ndani kwa ajili yako mwenyewe. Rudisha ujumbe wa jumla wa "Internal Server Error" kwa mteja (client).
- XSS kupitia innerHTML Nilitumia innerHTML kuonyesha data ya mtumiaji kwenye upande wa mbele (frontend). Hii inaruhusu washambuliaji kuingiza skripti (scripts) kwenye tovuti yako.
- Rekebisho: Kila wakati safisha (sanitize) data au tumia textContent badala ya innerHTML.
- Ukosefu wa Udhibiti wa Kasi (Rate Limiting) Nilikuwa na endpoints ambazo zilikuwa zinaita mifano ya AI ya gharama kubwa bila mipaka. Mtumiaji mmoja angeweza kusababisha bili kubwa ndani ya dakika chache.
- Rekebisho: Uthibitishaji unazuia watumiaji wasioruhusiwa. Rate limiting inazuia watumiaji walioruhusiwa kutumia vibaya mfumo wako. Unahitaji vyote viwili.
- Mipangilio ya CORS yenye Ruhusa Kubwa (Permissive CORS Settings) Nilitumia allow_origins=["*"] kwenye middleware yangu. Hii inaruhusu tovuti yoyote kufanya maombi (requests) kwenye API yako.
- Rekebisho: Ruhusu tu vikoa (domains) vyako maalum kwenye uzalishaji (production).
- Kuvuja kwa Faili Niliandika kodi iliyounda faili za muda lakini ikashindwa kuzifuta ikiwa mchakato ulikwama. Faili hizi hubaki kwenye seva yako milele.
- Suluhisho: Tumia kizuizi cha try-finally ili kuhakikisha faili zinafutwa hata kama hitilafu itatokea.
Masuala ya usalama mara chache huwa ya makusudi. Ni matokeo ya kusema "Nitarekebisha hili baadaye." Baadaye haiji kamwe.
Jenga usalama katika mtiririko wako wa kazi tangu siku ya kwanza. Kagua kodi yako kabla ya kuifanya commit na kabla ya kuidishia (deploy).
Chanzo: https://dev.to/justjinoit/i-audited-my-own-side-projects-for-security-issues-heres-what-i-found-1ahb