डेव्हलपर्स नेहमी स्प्रिंट डेडलाईन्स आणि फिचर रिक्वेस्ट्सच्या दबावाखाली असतात. परफॉर्मन्स ट्यूनिंग आणि UI पॉलिशिंगला जास्त महत्त्व मिळते. सुरक्षा (Security) सहसा बॅकलॉगमध्ये असते, आपल्या पाळीची शांतपणे वाट पाहत. ही वाट पाहणे एक चूक आहे. ऑटोमेटेड बॉट्स चोवीस तास इंटरनेट स्कॅन करत असतात, लीक झालेल्या कीज (keys), इंजेक्शन पॉइंट्स आणि कमकुवत ऑथेंटिकेशन शोधत असतात. डेटा ब्रीच (Data breaches) हे टेक न्यूजमध्ये आता सामान्य झाले आहेत, पण जबाबदार टीमसाठी, त्याचा परिणाम आणि साफसफाई अत्यंत कठीण असते. चांगली बातमी ही आहे की, सुरक्षित कोड लिहिण्यासाठी क्रिप्टोग्राफीमध्ये पीएचडी करण्याची गरज नाही. त्यासाठी तुमच्या दैनंदिन कामाच्या प्रक्रियेत काही भक्कम सवयी रुजवणे आवश्यक आहे. तुमच्या वापरकर्त्यांचे आणि तुमच्या सिस्टमचे खऱ्या अर्थाने संरक्षण करतील अशा पाच पद्धती खालीलप्रमाणे आहेत.
तुमचे ऑथेंटिकेशन सुरक्षित करा
अनेक टीम्स स्वतःची कस्टम लॉगिन सिस्टम तयार करण्याच्या मोहात पडतात. एक users टेबल, एक password कॉलम, एक JWT जनरेटर. जोपर्यंत तुम्हाला हे लक्षात येत नाही की आता सेशन मॅनेजमेंट, टोकन रोटेशन, ब्रूट-फोर्स प्रोटेक्शन आणि सुरक्षित पासवर्ड रिसेटची जबाबदारी तुमची आहे, तोपर्यंत हे सोपे वाटते. बहुतेक टीम्सनी हे शून्यापासून बनवणे थांबवले पाहिजे. OAuth 2.0 किंवा OpenID Connect द्वारे प्रस्थापित आयडेंटिटी प्रोव्हायडर्सना ऑथेंटिकेशन सोपवल्यामुळे तुमच्या कोडबेस मधील जोखमीचे संपूर्ण प्रकार कमी होतात. तुम्हाला असे प्रोटोकॉल्स मिळतात जे हजारो इंजिनिअर्सनी वापरले आहेत आणि व्यापक सुरक्षा समुदायाद्वारे तपासले गेले आहेत.
तरीही, जर तुम्हाला स्वतः पासवर्ड हाताळणे भाग असेल, तर त्यांना अत्यंत काळजीपूर्वक हाताळा. bcrypt किंवा Argon2 वापरून प्रत्येक पासवर्ड हॅश (Hash) करा. हे अल्गोरिदम जाणीवपूर्वक संथ (slow) बनवलेले आहेत. ही संथता अशा अटॅकर्सना रोखते जे तुमचा डेटाबेस चोरतात आणि ऑफलाइन पासवर्ड क्रॅक करण्याचा प्रयत्न करतात. पासवर्ड कधीही प्लेन टेक्स्टमध्ये (plain text) ठेवू नका. लॉग्समध्ये, क्रॅश रिपोर्टमध्ये किंवा कुठेही नाही.
मल्टी-फॅक्टर ऑथेंटिकेशन (MFA) आता ऐच्छिक राहिलेले नाही. पासवर्ड लीक होऊ शकतात. फिशिंग (Phishing) यशस्वी होऊ शकते. दुसरा फॅक्टर, मग तो TOTP ॲप असो किंवा हार्डवेअर की, अकाउंट हॅक होण्याचे प्रमाण लक्षणीयरीत्या कमी करतो.
जेव्हा तुम्ही सेशन टोकन्स किंवा JWTs जारी करता, तेव्हा ते HttpOnly आणि Secure कुकीजमध्ये साठवा. HttpOnly फ्लॅगमुळे JavaScript ला कुकी वाचण्यापासून रोखले जाते, ज्यामुळे अनेक क्रॉस-साइट स्क्रिप्टिंग (XSS) अटॅक्स निष्प्रभ होतात. Secure फ्लॅग हे सुनिश्चित करतो की ब्राउझर ते फक्त HTTPS वरच पाठवेल. JWTs ला localStorage मध्ये टाकू नका. हे सोयीचे वाटू शकते, परंतु तुमच्या साइटवरील कोणतीही XSS त्रुटी अटॅकरला तुमच्या वापरकर्त्यांच्या टोकन्सचा त्वरित प्रवेश देऊ शकते.
OWASP Top 10 ला तुमचा आधार मानून चाला
OWASP Top 10 हा केवळ एखादा सैद्धांतिक परीक्षेचा अभ्यासक्रम नाही. हे वेब ॲप्लिकेशन्स प्रत्यक्षात कोणत्या प्रकारे हॅक होतात, याची एक सूची आहे. याकडे दुर्लक्ष करणे म्हणजे तुमच्या रिफ्लेक्सेसवर विश्वास ठेवून ट्रॅफिक सिग्नलकडे दुर्लक्ष करण्यासारखे आहे.
SQL injection पहिल्यांदा नोंदवल्या गेल्यानंतर दशके उलटली तरी ते आजही प्रोडक्शन डेटाबेससाठी धोकादायक आहे. याचे निराकरण सोपे आहे, पण त्यासाठी शिस्त आवश्यक आहे. युजर इनपुट कधीही क्वेरी स्ट्रिंगमध्ये (query string) थेट जोडू नका. पॅरामीटराइज्ड क्वेरीज (parameterized queries) किंवा Prisma सारखे ORM वापरा जे तुमच्यासाठी एस्केपिंग (escaping) हाताळते. डेटाबेस ड्रायव्हर कोड आणि डेटा वेगळे करतो, ज्यामुळे कोणताही घातक इनपुट तुमची क्वेरी लॉजिक बदलू शकत नाही.
क्रॉस-साइट स्क्रिप्टिंग, किंवा XSS, हे अनफिल्टर्ड युजर इनपुटवर अवलंबून असते. जर तुमचे ॲप्लिकेशन युजरने सबमिट केलेले काहीही रेंडर (render) करत असेल, तर प्रथम ते सॅनिटाइज (sanitize) करा. आधुनिक फ्रेमवर्क्स सहसा आउटपुटला बाय डिफॉल्ट एस्केप करतात, परंतु कस्टम कंपोनंट्स आणि dangerouslySetInnerHTML-स्टाईल APIs या सुरक्षा नियमांना बगल देऊ शकतात. तुम्ही कशावर विश्वास ठेवता याबद्दल स्पष्ट राहा.
क्रॉस-साइट रिक्वेस्ट फोर्जरी (CSRF) ब्राउझरला अशी कृती करण्यास फसवते जी त्याने करू नये. तुमच्या फॉर्म्समध्ये अँटी-CSRF टोकन्सचा वापर करून आणि कुकीजवर SameSite ॲट्रिब्यूट सेट करून हे कमी करा. SameSite=Lax किंवा Strict ब्राउझरला क्रॉस-ओरिजिन रिक्वेस्ट दरम्यान कुकीज रोखून धरण्यास सांगते, ज्यामुळे बहुतेक CSRF थांबवले जातात.
'प्रिन्सिपल ऑफ लीस्ट प्रिव्हिलेज' लागू करा
प्रत्येक वापरकर्त्याला ॲडमिन अधिकार असण्याची गरज नसते. प्रत्येक मायक्रोसर्व्हिसला तुमच्या डेटाबेसचा रूट ॲक्सेस असण्याची गरज नसते. 'प्रिन्सिपल ऑफ लीस्ट प्रिव्हिलेज' म्हणजे एखाद्या विशिष्ट कार्यासाठी आवश्यक असलेला नेमका ॲक्सेस देणे आणि त्यापेक्षा जास्त काहीही नाही.
तुमच्या ॲप्लिकेशन डेटाबेस युजरपासून सुरुवात करा. जर तुमच्या बॅकएंडला फक्त रो (rows) वाचण्यासाठी आणि लिहिण्यासाठी गरज असेल, तर टेबल्स ड्रॉप करणे, स्कीमा बदलणे किंवा नवीन डेटाबेस तयार करण्याचे अधिकार काढून घ्या. जेव्हा एखादा अटॅकर तुमचे ॲप्लिकेशन हॅक करतो, तेव्हा हे मर्यादित अधिकार भिंतीसारखे काम करतात. ते डेटा चोरू शकतात, परंतु एका कमांडने तुमचे संपूर्ण इन्फ्रास्ट्रक्चर नष्ट करू शकत नाहीत.
तुमच्या क्लाउड एन्व्हायरमेंटसाठी देखील हाच विचार लागू करा. AWS IAM roles, Google Cloud service accounts आणि Azure managed identities हे केवळ विशिष्ट कृतींपुरते मर्यादित (scoped down) असावेत. केवळ स्टॅटिक ॲसेट्स तैनात करणाऱ्या CI/CD पाइपलाइनला महागडे कम्प्युट क्लस्टर्स सुरू करण्याची परवानगी असण्याची गरज नाही. या गोष्टी तपासा...
