سؤال

أنا أعمل لصالح عميل لديه قاعدة بيانات قديمة ضخمة تتكون من العديد من التطبيقات المستندة إلى Java en JSP.

تتم معظم عمليات الاستعلام باستخدام نظام "orm" الخاص ببناء المنزل.تستخدم بعض التطبيقات Plain Old JDBC.تعتمد بعض التطبيقات على السبات (نعم، يعد إنشاء HQL مع علامات الجمع مشكلة محتملة أيضًا).بعض التطبيقات القديمة مكتوبة بالكامل بلغة JSP.

لقد وجدت اثنين من أخطاء حقن SQL يدويًا.لكن يمكنني حقًا استخدام أداة من نوع ما للبحث عن نقاط الضعف المحتملة.

أيه أفكار؟

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

المحلول

أوصي FindBugs (يوجد أيضًا مكون إضافي لـ Eclipse) يمكنه تعقب هذه المشكلات وغيرها الكثير.

نحن نستخدمه في العمل، فهو سريع ويستحق المال (كما هو الحال مجانًا).لقد قمنا بحل بعض المشاكل الشائعة بمساعدتها.

نصائح أخرى

كنت أكتب بعض عمليات البحث أو أقوم بتحميل IDE الذي يبحث عن استخدام java.sql.Statement بدلاً من PreparationStatement.

ما حجم مساحة عنوان URL الخاص بك؟إذا كان ذلك ممكنًا، فمن الأفضل محاولة إدخال SQL عبر طلبات HTTP GET وPOST.هناك بعض المشكلات التي يمكن العثور عليها من خلال فحص كود المصدر/البايت، ولكن الطريقة الوحيدة لمعرفة أنواع المدخلات الضارة المحتملة التي سيقبلها تطبيقك هي استخدام طلبات HTTP.

كال9000 هي أداة جيدة لاختبار حقن SQL / البرمجة النصية عبر المواقع إذا كانت مجموعة عناوين URL الخاصة بك صغيرة.

ستقوم الشركات الجادة في اكتشاف المدخلات الضارة التي تم التعامل معها بشكل خاطئ بالاستعانة بطرف ثالث لإجراء اختبار الاختراق. وايت هات للأمن هو بائع عملت معه في الماضي ويمكنني أن أوصي به.استخدمناها لموقع ويب للتجارة الإلكترونية بقيمة 100 مليون دولار +.(ليس لدي أي علاقة بـ White Hat ولا أستفيد بأي شكل من الأشكال إذا أصبحت أحد عملاءهم.)

بصرف النظر عن جميع اختبارات/تعزيز التعليمات البرمجية الخاصة بك، فمن الجيد جدًا أن يكون لديك جدار حماية HTTP في مكانه مثل mod_security.

عندما كنت أعمل على توطين تطبيق "هذا لن يحتاج أبدًا إلى التوطين"، استخدمنا أداة محلية الصنع لتحليل التعليمات البرمجية المترجمة (IL في .NET، وهو نفس كود البايت في Java).

يمكنك العثور على استدعاء الأساليب المحددة التي تعمل مع قاعدة البيانات (عمليات CRUD النموذجية) التي تحتوي على معلمة سلسلة باستخدام أمر SQL، وتتبع مثيل السلسلة لأعلى والتحقق من الربط.

استخدمنا .NET Reflector لتفكيك وتتبع السلاسل.لكنني لا أعرف ما إذا كانت هناك أداة مماثلة متاحة لـ Java :(.

يمكنك الذهاب للوقاية بدلا من العلاج.أضف طبقة تعقيم أسفل واجهة المستخدم مباشرةً، لذلك لن ينتهي بك الأمر باستخدام SQL/النصوص البرمجية في مدخلات المستخدم.يجب أن تكون هناك أمثلة في جافا، لقد رأيت مثل هذا النهج في CakePHP

ابحث عن أي مكان لا يستخدم PreparedStatement.

أوصي CAL9000.يمكنك الحصول على التفاصيل من الرابط التالي:

كال9000

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