أمان تطبيقات Java: أهم 10 ثغرات أمنية — الجزء 2

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

أمان تطبيقات Java: أهم 10 ثغرات — الجزء 2

في الجزء الأول، قمنا بتحليل أول خمس ثغرات حرجة في تطبيقات Java. اليوم نواصل التعلم وننظر إلى التهديدات الخمسة المتبقية التي يجب أن يعرفها كل مطور. Java للمبتدئين والمبرمجين ذوي الخبرة — هذه المعلومات ستساعدك على كتابة كود أكثر أمانًا. في عالم البرمجة، الأمان ليس خيارًا، بل ضرورة.



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. إلغاء التسلسل غير الآمن

يمكن أن يؤدي إلغاء تسلسل البيانات غير الموثوقة إلى تنفيذ كود عشوائي. هذه واحدة من أخطر الثغرات في Java، لأنها غالبًا ما تسمح باختراق الخادم بالكامل.



مثال على الهجوم

ObjectInputStream ois = new ObjectInputStream(new FileInputStream("data.ser"));Object obj = ois.readObject(); // خطير!


طرق الحماية

  • لا تقم بإلغاء تسلسل البيانات من مصادر غير موثوقة
  • استخدم القوائم البيضاء للفئات
  • طبق تنسيقات بديلة (JSON, Protocol Buffers)


8. حقن SQL

على الرغم من أن هذا من كلاسيكيات البرمجة، إلا أن حقن SQL لا يزال يظهر في تطبيقات Java. استخدم دائمًا الاستعلامات ذات المعلمات.



خطأ (ضعيف)

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();


بالنسبة لـ Java للمبتدئين، يجب أن تكون هذه القاعدة بديهية: أبدًا لا تقم بدمج السلاسل النصية لاستعلامات SQL.



9. عيوب المصادقة وإدارة الجلسات

المصادقة الضعيفة، الجلسات القابلة للاختراق، والإدارة غير الصحيحة لكلمات المرور — مشكلة شائعة في تطبيقات الويب بلغة Java.



التوصيات

  • استخدم خوارزميات تجزئة كلمات المرور الحديثة (bcrypt, Argon2)
  • اضبط وقت صلاحية الجلسة بشكل صحيح
  • طبق ملفات تعريف الارتباط الآمنة (HttpOnly, Secure, SameSite)
  • نفذ المصادقة متعددة العوامل


10. استخدام مكونات ذات ثغرات معروفة

النظام البيئي لـ Java غني بالمكتبات، لكن العديد من المشاريع تستخدم إصدارات قديمة تحتوي على CVE عامة. هذه واحدة من أكثر مشاكل الأمان شيوعًا.



كيف تحمي نفسك

  • قم بتحديث التبعيات بانتظام
  • استخدم أدوات التحليل (OWASP Dependency-Check, Snyk)
  • اشترك في إشعارات الأمان للمكتبات المستخدمة
  • أتمتة

المدونات

توصيات الكتب