هل يمكنني رفض الوصول إلى فئة JVM عن طريق تكوين ملف Java.Policy؟

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

سؤال

أردت أن أضيف إلى بلدي jdk6\jre\lib\security\java.policy قم بتقديم حداثة لإنشاء بعض الفئات القائمة السوداء بواسطة APPEngine. على سبيل المثال، أريد أن رمي JVM المحلي الخاص بي استثناء عندما يحاول التطبيق إنشاء مثيل javax.naming.NamingException.

إنه ممكن؟

سأحاول شرح مشكلتي المحددة هنا. تقدم Google خدمة (محرك GAE-Google App) يحتوي على بعض القيود على ما يمكن استخدام الفصول الدراسية. على سبيل المثال لا تقوم بإرساء فصول JNDI الموجودة في حزمة JAVAX.NAMING. كما أنها توفر خادم اختبار يمكن استخدامها لاختبار هذا التطبيق على جهازي، ولكن هذا الخادم يسمح لهذه الفصول ويمكن أن يدفع الرمز. تجد أنك استخدمت فئة قائمة في القائمة السوداء فقط بعد تحميل طلبك إلى Google. كنت أفكر إذا تعذر القيام بهذه الفئة القائمة السوداء على التنمية JVM. وأعتقد آخر أن هذا سيكون من السهل أن يوفر بالفعل مثل هذا الملف السياسي.

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

المحلول

يمكنك كتابة تطبيق لودر صغير يخلق Classloader جديد. وبعد ثم يمكن بعد ذلك تحميل فئات التطبيق باستخدام هذا الكلاس.

في Classloader المخصص، يمكنك بعد ذلك رمي ClassnotfoundException عندما يحاول التطبيق الخاص بك الوصول إلى فئة تريدها القائمة السوداء.

سوف تحتاج إلى تحميل طريقة التحميل (). ستكون هذه الطريقة مسؤولة عن إلقاء الاستثناء الموجود على الفئات القائمة القائمة على القائمة السوداء التي تقوم بلقبها إلى الفصل الدراسي إذا سمح الفصل. تنفيذ عينة:

public Class loadClass(String name) throws ClassNotFoundException {
    if(name.equals("javax.lang.ClassIDontLike")){
       throw new ClassNotFoundException("I'm sorry, Dave. I'm afraid I can't do that.");
    }
    return super.loadClass(name, false);
}

(بالطبع، يمكن أن يكون التنفيذ الحقيقي أكثر تطورا من هذا)

نظرا لأن فئات التطبيق الخاصة بك يتم تحميلها من خلال هذا التصنيف، وأنت تفويض LoadClass () فقط فقط إلى Classlase Adgustrader عندما تريد، يمكنك Blacklist أن تقوم بأي فصول تحتاجها.

أنا متأكد من أن هذه هي الطريقة التي تستخدمها Google لفصول الأسلاك السوداء في خادمها. حمل كل تطبيق في تصنيف معين. يشبه هذا أيضا الطريقة التي يعزلها tomcat تطبيقات الويب المختلفة.

نصائح أخرى

ألا تفضل الحصول على أخطاء تجميع من أخطاء وقت التشغيل أثناء اختبار برنامجك؟ يمكنك تكوين IDE أو التحويل البرمجي الخاص بك لتحذيرك عند إنشاء فئة غير مرغوب فيها. أعلم أن Jewelj يحتوي على بعض الميزات الرائعة لهذا: يمكنك تحديد تحذيرات / أخطاء التجميع على نقاط الانضمام والحصول على ردود الفعل في Eg Eclipse. لاستخدام هذا في الكسوف، يمكنك ببساطة تثبيت البرنامج المساعد Jewelj واكتب جانبا مناسبا. للحصول على الأخطاء أثناء تجميع من سطر الأوامر أو البرنامج النصي، سيتعين عليك في الواقع استخدام مترجم Jewelj، لكنني أشك في أنك ستحتاج ذلك.

تقوم وثائق Java بتسرد جميع أذونات السياسة الممكنة هنا:http://java.sun.com/javase/6/docs/technotes/guides/security/permissions.html.

لا يتم ذكر إنشاء الفصل / التحميل، لذلك أعتقد أنك لا تستطيع فرض ذلك باستخدام سياسة.

على أي حال، لماذا تريد رمي استثناء عند تحميل فئة الاستثناء؟ ربما يمكنك شرح مشكلتك، ثم قد يكون شخص ما قادرا على اقتراح حل.

تعديل:

ستكون طريقة واحدة لمنع تحميل فئات معينة لإزالتها من تثبيت JRE. توجد معظم فئات النظام في RT.JAR في تثبيت JDK / JRE الخاص بك. يجب أن تكون قادرا على تعديلها مع أي أداة ZIP.

ما عليك سوى إنشاء تثبيت خاص لجيري الخاص بك، وتعديل RT.JAR الخاص به. هذا اختراق قبيح، ولكن يجب أن يكون موافق لأغراض الاختبار ...

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