ما هي الآثار الأمنية لاستخدام الأنواع الأولية في جافا؟

StackOverflow https://stackoverflow.com/questions/3503324

سؤال

أقوم حاليًا بمراجعة الآثار الأمنية لتحذيرات مختلفة في تطبيق Java EE كبير. نظرًا لأن معظم الكود يبلغ من العمر عدة سنوات ، فإنه يحتوي على العديد من الاستخدامات لأنواع التجميع الخام:

List items = new List();

بدلا من أنواع جمع المعالم:

List<Item> items = new List<Item>();

الآثار المترتبة على الأمان الوحيدة التي يمكنني التفكير فيها هي أن الأنواع الأولية لا يمكن فحصها بشكل ثابت عند التجميع ويمكن أن تؤدي إلى أخطاء في وقت التشغيل مثل ClassCastException والتي ، بناءً على مكان حدوث هذا في الكود ، قد يؤدي إلى رفض الخدمة.

هل هناك أي آثار أخرى على استخدام أنواع أولية لا أفكر فيها؟

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

المحلول

لا أستطيع التفكير في أي آثار أمنية أخرى.

بالنسبة للآثار غير الأمنية ، فإن الأنواع العامة تقوم أيضًا بتصريحات صريحة* في رمز bytecode للأنواع التي تُرجع عامًا. بالطبع ، هذا شفاف للمستخدم ، ويبدو أن النوع الذي تم إرجاعه هو النوع العام.

فمثلا:

List<Item> items = new ArrayList<Item>();
// .get(int) and remove(int) return Item automatically

*يحدث هذا بسبب اكتب المحو.

نصائح أخرى

يمكن أن يؤدي نقص السلامة من النوع إلى مشاكل أمنية. على سبيل المثال ، دعنا نقول أن هذه القائمة كانت تستخدم لبناء استعلام:

"select name from users where id="+items[x]

إذا كانت العناصر تحتوي على قيمة سلسلة من union select load_file('/var/passwd') يمكن للمهاجم قراءة ملف تعسفي على نظامك. هذه الحمولة هي تفترض استخدامك MySQL. إذا كانت العناصر قائمة بالأعداد الصحيحة ، فإن هذا الاستعلام ليس عرضة لحقن SQL.

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