जावा एप्लिकेशन सुरक्षा: व्यवहार में शीर्ष-10 कमजोरियाँ
\n\nजावा एप्लिकेशन सुरक्षा केवल चेकलिस्ट में एक टिक नहीं है, बल्कि विकास का एक महत्वपूर्ण पहलू है। OWASP के अनुसार, 70% से अधिक आधुनिक वेब एप्लिकेशन में कम से कम एक गंभीर कमजोरी होती है। इस लेख में, हम वास्तविक कोड उदाहरणों और उन्हें दूर करने के तरीकों के साथ 10 सबसे सामान्य खतरों का विश्लेषण करेंगे। यह सामग्री शुरुआती और अनुभवी जावा डेवलपर्स दोनों के लिए उपयोगी होगी।
\n\n1. SQL इंजेक्शन (Injection)
\nSQL इंजेक्शन कमजोरियों में अग्रणी बना हुआ है। हमलावर उपयोगकर्ता इनपुट के माध्यम से दुर्भावनापूर्ण SQL कोड इंजेक्ट कर सकता है।
\n\nकमजोर कोड:
\nString query = "SELECT * FROM users WHERE username = '" + username + "'";\nStatement stmt = connection.createStatement();\nResultSet rs = stmt.executeQuery(query);\n\nसुधारित कोड (PreparedStatement का उपयोग):
\nString query = "SELECT * FROM users WHERE username = ?";\nPreparedStatement pstmt = connection.prepareStatement(query);\npstmt.setString(1, username);\nResultSet rs = pstmt.executeQuery();\n\n2. XSS (Cross-Site Scripting)
\nXSS हमले वेब पेजों में क्लाइंट-साइड स्क्रिप्ट इंजेक्ट करने की अनुमति देते हैं। मुख्य सुरक्षा आउटपुट को एस्केप करना है।
\n\nकमजोर कोड (JSP):
\n<%= request.getParameter("comment") %>\n\nसुधारित कोड:
\n<%= Encode.forHtml(request.getParameter("comment")) %>\n\nविश्वसनीय एस्केपिंग के लिए OWASP Java Encoder लाइब्रेरी का उपयोग करें:
\nimport org.owasp.encoder.Encode;\nString safeOutput = Encode.forHtml(userInput);\n\n3. असुरक्षित डिसीरियलाइज़ेशन
\nजावा डिसीरियलाइज़ेशन रिमोट कोड एक्ज़ीक्यूशन (RCE) का कारण बन सकता है।
\n\nकमजोर कोड:
\nObjectInputStream ois = new ObjectInputStream(socket.getInputStream());\nObject obj = ois.readObject(); // खतरा!\n\nसुरक्षा के लिए सिफारिशें:
\n- \n
- अविश्वसनीय स्रोतों से डेटा को डिसीरियलाइज़ न करें \n
- डिसीरियलाइज़ेशन के दौरान क्लासों की श्वेत सूची का उपयोग करें \n
- जावा सीरियलाइज़ेशन के बजाय JSON या XML का उपयोग करें \n
// क्लास जांच के साथ सुरक्षित दृष्टिकोण\nObjectInputStream ois = new ObjectInputStream(inputStream) {\n @Override\n protected Class<?> resolveClass(ObjectStreamClass desc) throws IOException, ClassNotFoundException {\n if (!allowedClasses.contains(desc.getName())) {\n throw new InvalidClassException(desc.getName(), "अनधिकृत डिसीरियलाइज़ेशन");\n }\n return super.resolveClass(desc);\n }\n};\n\n4. CSRF (Cross-Site Request Forgery)
\nCSRF हमले उपयोगकर्ता को उस साइट पर अवांछित कार्य करने के लिए मजबूर करते हैं जहाँ वह प्रमाणित है।
\n\nटोकन के साथ सुरक्षा (Spring Security):
\n@Configuration\n@EnableWebSecurity\npublic class SecurityConfig extends WebSecurityConfigurerAdapter {\n @Override\n protected void configure(HttpSecurity http) throws Exception {\n http.csrf().csrfTokenRepository(CookieCsrfTokenRepository.withHttpOnlyFalse());\n }\n}\n\nफॉर्म में टोकन जोड़ना:
\n<form action="/transfer" method="POST">\n <input type="hidden" name="${_csrf.parameterName}" value="${_csrf.token}"/>\n <input type="text" name="amount"/>\n <button type="submit">स्थानांतरण करें</button>\n</form>\n\n5. अपवादों के माध्यम से सूचना रिसाव
\nविस्तृत त्रुटि संदेश एप्लिकेशन की आंतरिक संरचना को उजागर कर सकते हैं।
\n\nकमजोर कोड:
\ntry {\n // व्यावसायिक तर्क\n} catch (SQLException e) {\n response.getWriter().println("त्रुटि: " + e.getMessage()); // रिसाव!\n}\n\n<