मी माझ्या साइड प्रोजेक्ट्सचे सुरक्षेसाठी ऑडिट केले — मला काय आढळले ते येथे आहे
मी अलीकडेच माझ्या सर्व साइड प्रोजेक्ट्सचे ऑडिट केले. मी माझे FastAPI बॅकएंड्स, Telegram बॉट्स आणि वेब ॲप्स तपासले. मला वाटले होते की मी काळजीपूर्वक काम केले आहे.
मी चुकत होतो.
मला असे वास्तविक बग्स आढळले जे मी प्रत्यक्षात प्रोडक्शनमध्ये पाठवले होते. या केवळ सैद्धांतिक समस्या नाहीत. वेगाने काम करण्याच्या प्रयत्नात मी केलेल्या या चुका आहेत.
मला आढळलेल्या मुख्य समस्या आणि त्या कशा सुधाराव्या याबद्दलची माहिती खालीलप्रमाणे आहे:
१. कंडिशनल ऑथेंटिकेशन (Conditional Authentication) मी असा कोड लिहिला होता जो फक्त 'secret' अस्तित्वात असल्यास API की तपासत असे. जर मी माझ्या एन्व्हायरमेंटमध्ये 'secret' सेट करायला विसरलो, तर ही तपासणी पूर्णपणे वगळली जात असे. यामुळे माझे API सर्वांसाठी खुले झाले होते.
- उपाय: ऑथेंटिकेशन कधीही कंडिशनल ठेवू नका. जर 'secret' उपलब्ध नसेल, तर ॲपने एरर दाखवून थांबले पाहिजे.
२. Git हिस्ट्रीमध्ये की (Keys) लीक होणे मला माझ्या Git हिस्ट्रीमध्ये जुन्या API की आढळल्या. मी नंतर त्या .env फाईल्समध्ये हलवल्या होत्या, परंतु Git तुमच्या कोडची प्रत्येक जुनी आवृत्ती कायमस्वरूपी जतन करून ठेवते.
- उपाय: Git मध्ये कधीही कमिट केलेली कोणतीही की 'compromised' मानली पाहिजे. ती त्वरित रद्द करा. तुमची हिस्ट्री स्वच्छ करण्यासाठी
git-filter-repoसारखी साधने वापरा.
३. उरलेले डेबग एंडपॉइंट्स (Debug Endpoints) मी प्रोडक्शनमध्ये असे एंडपॉइंट्स तसेच ठेवले होते जे माझे डेटाबेस कॉन्फिगरेशन आणि सिस्टम सेटिंग्स दाखवत होते. हे डेव्हलपमेंट दरम्यान उपयुक्त असतात परंतु प्रत्यक्ष वापरासाठी धोकादायक असतात.
- उपाय: तुमच्या डिप्लॉयमेंट चेकलिस्टमध्ये डेबग एंडपॉइंट्स काढून टाकण्याचा मुद्दा समाविष्ट करा.
४. सविस्तर एरर मेसेजेस (Verbose Error Messages) मी वापरकर्त्याला थेट सिस्टम एरर्स (raw system errors) परत करत होतो. या एरर्समुळे तुमचे फाईल पाथ, डेटाबेस प्रकार आणि लायब्ररी व्हर्जन समजतात. एखादा अटॅकर तुमच्या सिस्टमला लक्ष्य करण्यासाठी या डेटाचा वापर करू शकतो.
- उपाय: स्वतःसाठी पूर्ण एरर अंतर्गत (internally) लॉग करा. क्लायंटला फक्त एक सामान्य "Internal Server Error" असा मेसेज पाठवा.
५. innerHTML द्वारे XSS
मी माझ्या फ्रंटएंडमध्ये युजर डेटा रेंडर करण्यासाठी innerHTML चा वापर केला होता. यामुळे अटॅकर्सना तुमच्या साइटमध्ये स्क्रिप्ट्स इंजेक्ट करण्याची परवानगी मिळते.
- उपाय: डेटा नेहमी सॅनिटाइज (sanitize) करा किंवा
innerHTMLऐवजीtextContentवापरा.
६. रेट लिमिटिंगचा अभाव (Lack of Rate Limiting) माझ्याकडे असे एंडपॉइंट्स होते जे कोणत्याही मर्यादेशिवाय महागड्या AI मॉडेल्सना कॉल करत होते. एक वापरकर्ता काही मिनिटांतच प्रचंड बिल वाढवू शकत होता.
- उपाय: ऑथेंटिकेशन अनधिकृत वापरकर्त्यांना थांबवते. रेट लिमिटिंग अधिकृत वापरकर्त्यांना तुमच्या सिस्टमचा गैरवापर करण्यापासून थांबवते. तुम्हाला या दोन्ही गोष्टींची गरज आहे.
७. सवलतीचे CORS सेटिंग्स (Permissive CORS Settings)
मी माझ्या मिडलवेअरमध्ये allow_origins=["*"] वापरले होते. यामुळे कोणतीही वेबसाइट तुमच्या API ला रिक्वेस्ट पाठवू शकते.
- उपाय: प्रोडक्शनमध्ये फक्त तुमचे विशिष्ट डोमेन्स (domains) अनुमती द्या.
- फाईल लीकेज मी असा कोड लिहिला जो तात्पुरत्या फाईल्स तयार करतो, परंतु प्रक्रिया क्रॅश झाल्यास त्या डिलीट करण्यात अपयशी ठरतो. या फाईल्स तुमच्या सर्व्हरवर कायमच्या राहतात.
- उपाय: त्रुटी (error) आली तरी फाईल्स डिलीट होतील याची खात्री करण्यासाठी try-finally ब्लॉक वापरा.
सुरक्षेच्या समस्या क्वचितच हेतुपुरस्सर असतात. त्या "मी हे नंतर ठीक करेन" असे म्हणण्याचे परिणाम असतात. पण ते "नंतर" कधीच येत नाही.
पहिल्या दिवसापासून तुमच्या वर्कफ्लोमध्ये सुरक्षा समाविष्ट करा. कोड कमिट (commit) करण्यापूर्वी आणि डिप्लॉय (deploy) करण्यापूर्वी तो तपासा.
स्रोत: https://dev.to/justjinoit/i-audited-my-own-side-projects-for-security-issues-heres-what-i-found-1ahb