AnestedAnested
ब्लॉग
Engineering·7 min read

Node.js API सुरक्षा: हमारी शिपिंग चेकलिस्ट

हमारी हर Express API एक ही सुरक्षा समीक्षा से गुज़रती है। यह रही असली चेकलिस्ट — रेट लिमिटिंग और JWT से लेकर उन SQL इंजेक्शन गलतियों तक जो आज भी कोड रिव्यू में दिखती हैं।

लेखक: Anested Engineering

हमारी वर्कशॉप से निकलने वाली हर Express API प्रोडक्शन छूने से पहले एक ही सुरक्षा समीक्षा से गुज़रती है। चेकलिस्ट इतनी छोटी है कि उस पर वाकई अमल हो सके — यही उसका मकसद है। चालीस-बिंदुओं वाला सुरक्षा दस्तावेज़ जिसे कोई नहीं पढ़ता, किसी की रक्षा नहीं करता।

पहला, ऑथेंटिकेशन की सीमाएँ। टोकन हर सुरक्षित रूट पर मिडलवेयर से जाँचे जाते हैं — कभी अलग-अलग हैंडलर के अंदर नहीं, जहाँ कोई रीफैक्टर चुपचाप जाँच हटा सकता है। JWT की मियाद छोटी रखी जाती है, और कोई भी विशेषाधिकार वाला काम यूज़र की भूमिका डेटाबेस से दोबारा पढ़ता है — एक दिन पुराने टोकन में बेक हुए दावों पर भरोसा नहीं करता।

दूसरा, हर सार्वजनिक सतह पर रेट लिमिटिंग — और अलग-अलग सतहों पर अलग सीमाएँ। लॉगिन एंडपॉइंट को हर विंडो में गिनती की कोशिशें मिलती हैं, क्योंकि क्रेडेंशियल स्टफिंग मात्रा का धंधा है। सार्वजनिक फ़ॉर्म को असली उपयोगकर्ताओं जितनी गुंजाइश मिलती है, उससे ज़्यादा नहीं। लिमिटर उबाऊ मिडलवेयर है — और ब्रूट-फ़ोर्स हमले के सामने उबाऊ ही चाहिए।

तीसरा, पैरामीटराइज़्ड क्वेरी — बिना किसी अपवाद के। हमारे कोडबेस का हर SQL स्टेटमेंट प्लेसहोल्डर इस्तेमाल करता है; क्वेरी में स्ट्रिंग जोड़ना सीधा रिव्यू-रिजेक्शन है, तब भी जब वैल्यू 'यूज़र से आ ही नहीं सकती'। जिन वैल्यू को वाकई क्वेरी की संरचना बदलनी है — कोई sort कॉलम, कोई interval — वे हार्डकोडेड व्हाइटलिस्ट से आती हैं, रिक्वेस्ट से कभी नहीं।

चौथा, सीमा पर वैलिडेट करो और निकास पर एस्केप। रिक्वेस्ट बॉडी आते ही आकार और तर्क के लिए जाँची जाती है। जो कुछ भी बाद में ईमेल, लॉग या HTML टेम्पलेट में जाता है, उस मंज़िल के हिसाब से एस्केप होता है। क्रॉस-साइट स्क्रिप्टिंग लगभग हमेशा आउटपुट की समस्या है जो इनपुट का चोला पहने रहती है।

अंत में, खामोश ज़रूरी चीज़ें: Helmet से सुरक्षा हेडर, जाने-पहचाने ओरिजिन तक सीमित CORS, ऐसे सीक्रेट जो एनवायरनमेंट वेरिएबल में रहें और रिपॉज़िटरी तक कभी न पहुँचें, और ऐसी एरर-प्रतिक्रियाएँ जो क्लाइंट से बस 'कुछ गड़बड़ हुई' कहें जबकि असली स्टैक ट्रेस लॉग में जाए। हमलावर एरर संदेश ज़्यादातर डेवलपर्स से ज़्यादा ध्यान से पढ़ते हैं।

इसमें कुछ भी विदेशी नहीं है। यही सबक हम हर टीम को देंगे: जिन API में सेंध लगती है, उनमें प्रायः उन्नत बचाव नहीं — लगातार लागू की गई बुनियादी बातें गायब होती हैं। जो चेकलिस्ट आप सच में चलाते हैं, वह उस आर्किटेक्चर डायग्राम से बेहतर है जिसे आप बस निहारते हैं।

इस पोस्ट से जुड़ी किसी चीज़ में मदद चाहिए?

हमारे इंजीनियर सीधे जवाब देते हैं — होस्टिंग, डेटाबेस, कोड, या इस पोस्ट से जुड़ा कुछ भी।