سؤال

أقوم بإنشاء تطبيق ويب Java باستخدام Java EE 6 و JSF-2.0 ، باستخدام واجهة برمجة تطبيقات الثبات لجميع عمليات قاعدة البيانات.

الواجهة الخلفية هي MySQL ، لكنني استخدمت وظائف ContityManager واستعلامات تسمي في EJB-QL لجميع العمليات. هل هجمات حقن SQL ممكنة في هذه الحالة؟

هل كانت مفيدة؟

المحلول

من الممكن فقط إذا كنت تضمن المتغيرات التي يسيطر عليها المستخدم في سلسلة SQL/JPQL مثل SO:

String sql = "SELECT u FROM User u WHERE id=" + id;

إذا كنت لا تفعل ذلك وتستخدم الاستعلامات المعلمة/المسماة فقط ، فأنت آمن.

نصائح أخرى

نعم هذا ممكن. ذلك يعتمد على الطريقة التي تنفذ بها.
القي نظرة على منع الحقن في لغة استعلام JPA.

إذا قام مزود JPA الخاص بك بمعالجة جميع وسيطات الإدخال للتعامل مع هجمات الحقن ، فيجب تغطيتك. نحن نفعل رقيقة في Eclipselink.

كما ذكر الملصق السابق أن تجميع JPQL أو SQL الخاص بك (للاستعلامات الأصلية) يمكن أن يعرضك.

أود أن أوصي باستخدام الاستعلامات المسماة مع المعلمات على السلاسل المتسلسلة لبناء JPQL/SQL.

دوغ

في حال كنت تسأل من منظور هجومي/عملي ، إذا تم إنشاء عبارة JPQL من إدخال المستخدم ، ففكر في إدخال المستخدم التالي:

blah') AND FUNCTION('user like chr(65)||chr(37) AND 42 - ', 1) > 40 AND ('42'='42

إذا كانت الضحية تستخدم تطبيق JPA> = 2.1 ، وكانت قاعدة بيانات الواجهة الخلفية Oracle ، فقد يكون هناك شيء مثل ما سبق بمثابة حقنة SQL منطقية لإخبارك ما إذا كان مستخدم قاعدة البيانات يبدأ بـ "A".

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top