𝗜 𝗔𝘂𝗱𝗶𝘁𝗲𝗱 𝗠𝘆 𝗦𝗶𝗱𝗲 𝗣𝗿𝗼𝗷𝗲𝗰𝘁𝘀 𝗳𝗼𝗿 𝗦𝗲𝗰𝘂𝗿𝗶𝘁𝘆 — 𝗛𝗲𝗿𝗲 𝗜𝘀 𝗪𝗵𝗮𝘁 𝗜 𝗙𝗼𝘂𝗻𝗱
મેં તાજેતરમાં મારા તમામ સાઇડ પ્રોજેક્ટ્સનું ઓડિટ કર્યું. મેં મારા FastAPI બેકએન્ડ્સ, ટેલિગ્રામ બોટ્સ અને વેબ એપ્સ તપાસ્યા. મને લાગતું હતું કે હું સાવધ હતો.
હું ખોટો હતો.
મને વાસ્તવિક બગ્સ મળ્યા જે મેં ખરેખર પ્રોડક્શનમાં મોકલ્યા હતા. આ કોઈ સૈદ્ધાંતિક સમસ્યાઓ નથી. આ એવી ભૂલો છે જે મેં ઝડપથી કામ કરવાના પ્રયાસમાં કરી હતી.
અહીં મને મળેલી મુખ્ય સમસ્યાઓ અને તેને કેવી રીતે સુધારવી તે છે:
- કન્ડિશનલ ઓથેન્ટિકેશન (Conditional Authentication) મેં એવો કોડ લખ્યો હતો જે ફક્ત ત્યારે જ API કી તપાસતો હતો જો કોઈ secret અસ્તિત્વમાં હોય. જો હું મારા એન્વાયરમેન્ટમાં secret સેટ કરવાનું ભૂલી ગયો હોત, તો આ તપાસ સંપૂર્ણપણે રહી જતી. આના કારણે મારી API દરેક માટે ખુલ્લી રહી ગઈ હતી.
- સુધારો: ઓથેન્ટિકેશનને ક્યારેય કન્ડિશનલ ન બનાવો. જો secret ખૂટતું હોય, તો એપ્લિકેશને એરર આપવી જોઈએ અને અટકી જવી જોઈએ.
- Git હિસ્ટ્રીમાં કી લીક થવી મને મારા Git હિસ્ટ્રીમાં જૂની API કી મળી. મેં પછીથી તેને .env ફાઇલોમાં ખસેડી દીધી હતી, પરંતુ Git તમારા કોડનું દરેક જૂનું વર્ઝન હંમેશ માટે સાચવી રાખે છે.
- સુધારો: Git માં ક્યારેય કમિટ કરેલી કોઈપણ કીને જોખમમાં ગણો. તેને તરત જ રિવોક (revoke) કરો. તમારી હિસ્ટ્રી સાફ કરવા માટે
git-filter-repoજેવા સાધનોનો ઉપયોગ કરો.
- બાકી રહી ગયેલા ડેબગ એન્ડપોઇન્ટ્સ (Debug Endpoints) મેં પ્રોડક્શનમાં એવા એન્ડપોઇન્ટ્સ છોડી દીધા હતા જે મારા ડેટાબેઝ કોન્ફિગરેશન અને સિસ્ટમ સેટિંગ્સ બતાવતા હતા. આ ડેવલપમેન્ટ દરમિયાન ઉપયોગી છે પરંતુ વાસ્તવિક ઉપયોગમાં જોખમી છે.
- સુધારો: તમારી ડિપ્લોયમેન્ટ ચેકલિસ્ટમાં ડેબગ એન્ડપોઇન્ટ દૂર કરવાનો મુદ્દો ઉમેરો.
- વિગતવાર એરર મેસેજ (Verbose Error Messages) હું યુઝરને સીધી સિસ્ટમ એરર્સ પરત કરી રહ્યો હતો. આ એરર્સ તમારા ફાઇલ પાથ, ડેટાબેઝ પ્રકાર અને લાઇબ્રેરી વર્ઝન જાહેર કરે છે. એક હુમલાખોર તમારા સિસ્ટમને નિશાન બનાવવા માટે આ ડેટાનો ઉપયોગ કરી શકે છે.
- સુધારો: તમારા પોતાના ઉપયોગ માટે આખી એરર આંતરિક રીતે લોગ કરો. ક્લાયન્ટને સામાન્ય "Internal Server Error" મેસેજ પરત કરો.
innerHTMLદ્વારા XSS મેં મારા ફ્રન્ટએન્ડમાં યુઝર ડેટા રેન્ડર કરવા માટેinnerHTMLનો ઉપયોગ કર્યો હતો. આ હુમલાખોરોને તમારી સાઇટમાં સ્ક્રિપ્ટ્સ ઇન્જેક્ટ કરવાની મંજૂરી આપે છે.
- સુધારો: હંમેશા ડેટાને સેનિટાઇઝ (sanitize) કરો અથવા
innerHTMLને બદલેtextContentનો ઉપયોગ કરો.
- રેટ લિમિટિંગનો અભાવ (Lack of Rate Limiting) મારી પાસે એવા એન્ડપોઇન્ટ્સ હતા જે મર્યાદા વગર મોંઘા AI મોડલ્સને કોલ કરતા હતા. એક યુઝર મિનિટોમાં મોટું બિલ બનાવી શકે છે.
- સુધારો: ઓથેન્ટિકેશન અનધિકૃત યુઝર્સને રોકે છે. રેટ લિમિટિંગ અધિકૃત યુઝર્સને તમારી સિસ્ટમનો દુરુપયોગ કરતા રોકે છે. તમારે બંનેની જરૂર છે.
- પરમિસિવ CORS સેટિંગ્સ (Permissive CORS Settings)
મેં મારા મિડલવેરમાં
allow_origins=["*"]નો ઉપયોગ કર્યો હતો. આ કોઈપણ વેબસાઇટને તમારી API માં વિનંતીઓ કરવા દે છે.
- સુધારો: પ્રોડક્શનમાં ફક્ત તમારા ચોક્કસ ડોમેન્સને જ મંજૂરી આપો.
- ફાઇલ લીકેજ મેં એવો કોડ લખ્યો હતો જે કામચલાઉ ફાઇલો બનાવતો હતો, પરંતુ જો પ્રોસેસ ક્રેશ થઈ જાય તો તેને ડિલીટ કરવામાં નિષ્ફળ રહ્યો. આ ફાઇલો તમારા સર્વર પર કાયમ માટે રહી જાય છે.
- સુધારો: જો ભૂલ આવે તો પણ ફાઇલો ડિલીટ થાય તે સુનિશ્ચિત કરવા માટે try-finally બ્લોકનો ઉપયોગ કરો.
સુરક્ષાના પ્રશ્નો ભાગ્યે જ જાણીજોઈને કરવામાં આવે છે. તેઓ "હું આ પછી સુધારીશ" કહેવાનું પરિણામ છે. પણ તે 'પછી' ક્યારેય આવતું નથી.
પહેલા દિવસથી જ તમારા વર્કફ્લોમાં સુરક્ષાનો સમાવેશ કરો. કોડ commit કરતા પહેલા અને deploy કરતા પહેલા તેને તપાસો.
સ્ત્રોત: https://dev.to/justjinoit/i-audited-my-own-side-projects-for-security-issues-heres-what-i-found-1ahb