में विशेषाधिकारित ब्लॉक की आवश्यकता क्या है मैंने विशेषाधिकार ब्लॉक के भीतर निष्पादित प्रतिबिंब के माध्यम से फ़ील्ड मान प्राप्त करने के लिए कोड देखा है। कोड का टुकड़ा के बाद ReflectionUtil
से लिया जाता है:प्रतिबिंब
public static <T> T accessDeclaredField(final Field f, final Object o, final Class<T> responseClass) {
return AccessController.doPrivileged(new PrivilegedAction<T>() {
public T run() {
boolean b = f.isAccessible();
try {
f.setAccessible(true);
return responseClass.cast(f.get(o));
} catch (SecurityException e) {
return null;
} catch (IllegalAccessException e) {
return null;
} finally {
f.setAccessible(b);
}
}
});
}
मैं विशेषाधिकार प्राप्त ब्लॉक के भीतर क्षेत्र मूल्य प्राप्त करने के कारण समझ में नहीं आता; हम इसके बिना इसे कर सकते हैं।
क्या यह बेहतर कोडिंग अभ्यास है या क्या हमें कुछ अतिरिक्त लाभ मिलता है?
रेफरी: API for Privileged Blocks
एक अप्रत्याशित साइड नोट के रूप में: यदि किसी की सुरक्षा सेटिंग्स विश्वसनीय कोड और कुछ अविश्वसनीय कोड के रूप में सीएक्सएफ लोड करती है, तो अविश्वसनीय कोड जावा सैंडबॉक्स से बचने के लिए (केवल सही 'पैरामीटर के साथ' सार्वजनिक स्थिर 'विधि को कॉल करके) अविश्वसनीय कोड कर सकता है। पाठक को एक अभ्यास के रूप में कौन सा पैरामीटर छोड़ा गया है। सबक सीखा: कभी भी ** सार्वजनिक ** विधि में डुबकी का उपयोग न करें जहां कॉलर सभी प्रासंगिक मानकों को नियंत्रित कर सकता है ... – mihi
@mihi आपकी टिप्पणी कई लोगों को सिखाएगी अगर यह पहेली के मुख्य भाग को बाहर नहीं छोड़ती पाठक के लिए व्यायाम। ज्यादातर लोगों के लिए "कोई सबक नहीं सीखा" होगा। अधिकांश लोगों के लिए –
@MarkoTopolnik यह जानने के लिए पर्याप्त है कि आप किसी भी निजी क्षेत्र में लिख सकते हैं, और यह एक सुरक्षा समस्या है। सुरक्षा प्रबंधक को तोड़ने के लिए लिखने वाले लोगों को ढूंढना मुश्किल नहीं है। प्रेरणा के लिए: https://github.com/schierlm/JavaPayload/blob/master/JavaPayload/src/javapayload/escalate/EscalateBasics.java#L58 – mihi