यदि आप सुरक्षा संवेदनशील वातावरण में काम कर रहे हैं, तो कृपया इसे पढ़ें।
कृपया कभी भी System#getProperty(String)
सबरूटीन के माध्यम से प्राप्त संपत्ति पर भरोसा करने से बचना चाहिए ! वास्तव में, लगभग हर संपत्ति सहित os.arch
, os.name
और आसानी os.version
से नहीं है जैसा कि आप उम्मीद कर सकते हैं - इसके बजाय, वे वास्तव में काफी विपरीत हैं।
सबसे पहले, System#setProperty(String, String)
सबरूटीन को लागू करने की पर्याप्त अनुमति वाला कोई भी कोड वसीयत में दिए गए शाब्दिक को संशोधित कर सकता है। हालाँकि, यह जरूरी नहीं कि यहां प्राथमिक मुद्दा हो, क्योंकि इसे तथाकथित के उपयोग के माध्यम से हल किया जा सकता है SecurityManager
, जैसा कि यहां पर विस्तार से बताया गया है ।
वास्तविक मुद्दा यह है कि कोई भी उपयोगकर्ता JAR
प्रश्न में चलने पर इन गुणों को संपादित करने में सक्षम है । इसका मतलब है कि यह निर्धारित करने का कोई तरीका नहीं है कि क्या ये गुण वास्तव में सटीक हैं। इस वजह से, छेड़छाड़ से बचने और बचने के लिए कुछ अतिरिक्त जाँचें यहाँ दी गई हैं:
// The first thing we're able to do is to query the filesystem.
switch (java.io.File.separator)
{
case "/":
// Windows is a potential candidate.
break;
case "\\":
// And here it could really be anything else.
break;
default:
// There's probably something really wrong here by now.
break;
}
एक और अच्छा विचार ऑपरेटिंग सिस्टम विशिष्ट निर्देशिकाओं की उपस्थिति की जांच करना है। जो कुछ भी आप ले सकते हैं, याद रखें कि जावा भाषा क्रॉस प्लेटफॉर्म होने के लिए प्रेरित है। तो, आप ऐसा करने की कोशिश क्यों नहीं करते?
Windows 10
और फिर भीos.name
मुझे देता हैWindows 8.1
। ऐसा क्यों है? यह कहां से आ रहा है?