जावा अनुप्रयोग सुरक्षा: शुरुआती लोगों के लिए शीर्ष 10 कमजोरियाँ

शुरुआती लोगों के लिए ऑनलाइन Python प्रशिक्षक

Python आसानी से सीखें बिना सिद्धांत के बोझ के। स्वचालित जांच के साथ व्यावहारिक कार्य हल करें और ब्राउज़र में सीधे कोड लिखें।

पाठ्यक्रम शुरू करें

जावा अनुप्रयोग सुरक्षा: शुरुआती लोगों के लिए शीर्ष 10 कमजोरियाँ

\n

जावा कॉर्पोरेट और वेब अनुप्रयोग बनाने के लिए सबसे लोकप्रिय भाषाओं में से एक बना हुआ है। हालाँकि, एक विश्वसनीय प्लेटफ़ॉर्म भी कोड की सुरक्षा की गारंटी नहीं देता है। OWASP के अनुसार, अधिकांश हैक डेवलपर्स की गलतियों के कारण होते हैं, न कि JVM में कमजोरियों के कारण। इस लेख में, हम जावा अनुप्रयोगों की शीर्ष 10 कमजोरियों पर चर्चा करेंगे, जिन्हें हर शुरुआती डेवलपर को जानना चाहिए। आपको न केवल सैद्धांतिक ज्ञान मिलेगा, बल्कि खतरनाक गलतियों से बचने के तरीके के स्पष्टीकरण के साथ व्यावहारिक कोड उदाहरण भी मिलेंगे।

\n\n

1. SQL-इंजेक्शन (SQL Injection)

\n

सबसे आम खतरा। यदि आप सीधे स्ट्रिंग्स को जोड़ते हैं तो हमलावर मनमाना SQL क्वेरी निष्पादित कर सकता है।

\n

खराब उदाहरण (कमजोर कोड):

\n
String query = "SELECT * FROM users WHERE username = '" + userName + "' AND pass = '" + password + "'";\nStatement stmt = connection.createStatement();\nResultSet rs = stmt.executeQuery(query);
\n

समाधान: पैरामीटरयुक्त क्वेरी के साथ PreparedStatement का उपयोग करें।

\n
String query = "SELECT * FROM users WHERE username = ? AND pass = ?";\nPreparedStatement pstmt = connection.prepareStatement(query);\npstmt.setString(1, userName);\npstmt.setString(2, password);\nResultSet rs = pstmt.executeQuery();
\n\n

2. क्रॉस-साइट स्क्रिप्टिंग (XSS)

\n

यदि आप बिना एस्केप किए HTML में उपयोगकर्ता डेटा आउटपुट करते हैं, तो हमलावर JavaScript कोड इंजेक्ट कर सकता है।

\n

कमजोर कोड (JSP):

\n
<%= request.getParameter("message") %>
\n

सुरक्षा: लाइब्रेरी (जैसे, OWASP Java Encoder) का उपयोग करके आउटपुट को एस्केप करें या ऑटो-एस्केपिंग वाले टेम्पलेट इंजन (Thymeleaf, JSP with JSTL) का उपयोग करें।

\n
<c:out value="${message}" />
\n\n

3. असुरक्षित डिसीरियलाइज़ेशन

\n

जावा डिसीरियलाइज़ेशन रिमोट कोड एक्ज़ीक्यूशन (RCE) का कारण बन सकता है यदि हमलावर विशेष रूप से तैयार बाइट स्ट्रीम भेजता है।

\n

खराब प्रथा:

\n
ObjectInputStream ois = new ObjectInputStream(socket.getInputStream());\nObject obj = ois.readObject(); // कुछ भी पुनर्स्थापित किया जा सकता है
\n

सिफारिशें:

\n
    \n
  • अविश्वसनीय स्रोतों से डेटा को कभी भी डिसीरियलाइज़ न करें।
  • \n
  • क्लासों की श्वेत सूची का उपयोग करें (look-ahead object input stream)।
  • \n
  • विकल्पों पर विचार करें (JSON, Protobuf)।
  • \n
\n\n

4. OS कमांड इंजेक्शन (Command Injection)

\n

यदि आपका एप्लिकेशन उपयोगकर्ता डेटा के साथ सिस्टम कमांड को कॉल करता है, तो इंजेक्शन संभव है।

\n

खतरनाक कोड:

\n
Runtime.getRuntime().exec("ping " + userInput); // userInput = 127.0.0.1; rm -rf /
\n

सुरक्षा: shell-कमांड को कॉल करने से बचें, बिल्ट-इन जावा लाइब्रेरी का उपयोग करें। यदि कॉल अपरिहार्य है - सख्त श्वेत सूची के साथ इनपुट डेटा को मान्य करें।

\n\n

5. प्रमाणीकरण और सत्र प्रबंधन की कमियाँ

\n

कमजोर सत्र सुरक्षा एक सामान्य समस्या है। उदाहरण के लिए, अनुमानित सत्र पहचानकर्ताओं का उपयोग या पासवर्ड को सादे पाठ में संग्रहीत करना।

\n
    \n
  • SecureRandom का उपयोग करके सत्र ID जनरेट करें।
  • \n
  • पासवर्ड के लिए आधुनिक हैश (bcrypt, scrypt, Argon2) का उपयोग करें।
  • \n
  • सत्र टाइम-आउट और कुकीज़ के लिए HttpOnly/Secure फ़्लैग सेट करें।
  • \n
\n\n

6. असुरक्षित कॉन्फ़िगरेशन (Security Misconfiguration)

\n

छोड़े गए डीबग मोड, डिफ़ॉल्ट पासवर्ड, खुले पोर्ट - ये सब हमलावर को सिस्टम के बारे में जानकारी देते हैं।

\n

Spring Boot में क्या जाँचें:

\n
    \n
  • प्रोडक्शन में Actuator endpoints को बंद करें या उन्हें सुरक्षित करें।
  • \n
  • प्रोडक्शन में spring.jpa.show-sql=true का उपयोग न करें।
  • \n
  • डिफ़ॉल्ट सर्वर हेडर हटाएँ।

ब्लॉग

पुस्तक अनुशंसाएँ