जावा एप्लिकेशन सुरक्षा: शीर्ष 10 कमजोरियाँ — भाग 2
पहले भाग में, हमने जावा एप्लिकेशन की पहली पाँच गंभीर कमजोरियों पर चर्चा की। आज हम सीखना जारी रखते हैं और शेष पाँच खतरों पर विचार करते हैं जिनके बारे में हर डेवलपर को पता होना चाहिए। शुरुआती लोगों के लिए जावा और अनुभवी प्रोग्रामर — यह जानकारी आपको अधिक सुरक्षित कोड लिखने में मदद करेगी। प्रोग्रामिंग की दुनिया में, सुरक्षा कोई विकल्प नहीं, बल्कि एक आवश्यकता है।
6. बाहरी XML इकाइयाँ (XXE)
XXE हमले तब होते हैं जब कोई एप्लिकेशन XML दस्तावेज़ों को संसाधित करता है जिनमें बाहरी इकाइयों के संदर्भ होते हैं। हमलावर स्थानीय फ़ाइलें पढ़ सकता है, SSRF हमला कर सकता है, या सेवा से इनकार कर सकता है।
कमजोर कोड
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
Document doc = builder.parse(new InputSource(new StringReader(xmlData)));
सुरक्षा
- बाहरी इकाइयों और DTD को अक्षम करें
- सुरक्षित पार्सर का उपयोग करें
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
factory.setFeature("http://apache.org/xml/features/disallow-doctype-decl", true);
factory.setFeature("http://xml.org/sax/features/external-general-entities", false);
factory.setFeature("http://xml.org/sax/features/external-parameter-entities", false);
7. असुरक्षित डिसीरियलाइज़ेशन
अविश्वसनीय डेटा का डिसीरियलाइज़ेशन मनमाना कोड निष्पादन का कारण बन सकता है। यह जावा में सबसे खतरनाक कमजोरियों में से एक है, क्योंकि यह अक्सर सर्वर से पूरी तरह समझौता करने की अनुमति देता है।
हमले का उदाहरण
ObjectInputStream ois = new ObjectInputStream(new FileInputStream("data.ser"));
Object obj = ois.readObject(); // खतरनाक!
सुरक्षा के तरीके
- अविश्वसनीय स्रोतों से डेटा का डिसीरियलाइज़ेशन न करें
- क्लासों की श्वेत सूची का उपयोग करें
- वैकल्पिक प्रारूपों (JSON, Protocol Buffers) का उपयोग करें
8. SQL इंजेक्शन
हालाँकि यह प्रोग्रामिंग का एक क्लासिक है, SQL इंजेक्शन अभी भी जावा एप्लिकेशन में पाए जाते हैं। हमेशा पैरामीटरयुक्त क्वेरी का उपयोग करें।
गलत (कमजोर)
String query = "SELECT * FROM users WHERE name = '" + userName + "'";
Statement stmt = connection.createStatement();
ResultSet rs = stmt.executeQuery(query);
सही (सुरक्षित)
String query = "SELECT * FROM users WHERE name = ?";
PreparedStatement pstmt = connection.prepareStatement(query);
pstmt.setString(1, userName);
ResultSet rs = pstmt.executeQuery();
शुरुआती लोगों के लिए जावा के लिए यह नियम एक स्वयंसिद्ध होना चाहिए: SQL क्वेरी के लिए स्ट्रिंग को कभी संयोजित न करें।
9. प्रमाणीकरण और सत्र प्रबंधन की कमियाँ
कमजोर प्रमाणीकरण, असुरक्षित सत्र और पासवर्ड का गलत प्रबंधन जावा पर वेब एप्लिकेशन में एक आम समस्या है।
सिफारिशें
- पासवर्ड हैशिंग के लिए आधुनिक एल्गोरिदम (bcrypt, Argon2) का उपयोग करें
- सत्र की उचित अवधि निर्धारित करें
- सुरक्षित कुकीज़ (HttpOnly, Secure, SameSite) का उपयोग करें
- बहु-कारक प्रमाणीकरण लागू करें
10. ज्ञात कमजोरियों वाले घटकों का उपयोग
जावा इकोसिस्टम लाइब्रेरी से समृद्ध है, लेकिन कई प्रोजेक्ट सार्वजनिक CVE वाले पुराने संस्करणों का उपयोग करते हैं। यह सबसे आम सुरक्षा समस्याओं में से एक है।
कैसे बचाव करें
- नियमित रूप से निर्भरताएँ अपडेट करें
- विश्लेषण उपकरणों (OWASP Dependency-Check, Snyk) का उपयोग करें
- उपयोग की जाने वाली लाइब्रेरी के लिए सुरक्षा सूचनाओं की सदस्यता लें
- स्वचालित