क्या जावा में कोई अस्थायी फ़ाइल को सुरक्षित रूप से लिखने के लिए कोई तरीका है?जावा समकक्ष mkstemp
जहां तक मैं कह सकता हूं, एक अस्थायी फ़ाइल (createTempFile) बनाने का एकमात्र तरीका वास्तव में एक ही समय में इसे खोलता नहीं है, इसलिए & फ़ाइल लिखने के बीच एक दौड़ स्थिति है। क्या मैं कुछ भूल रहा हूँ? मुझे UnixFileSystem.java में CreateFileExclusively (स्ट्रिंग) के पीछे सी स्रोत कोड नहीं मिला, लेकिन मुझे संदेह है कि यह वास्तव में कुछ भी कर सकता है क्योंकि फ़ाइल फ़ाइल खोलने के बाद जावा कोड में फ़ाइल खुली होती है (जब तक कि यह कुछ करने की कोशिश नहीं करता फ़ाइल ताले?)।
समस्या
बीच जब अस्थायी फ़ाइल बनाई गई है & आप इसे खोलने, एक दुर्भावनापूर्ण हमलावर को अनलिंक सकता है अस्थायी फ़ाइल & वहाँ दुर्भावनापूर्ण सामान डाल कि। उदाहरण के लिए, एक हमलावर संवेदनशील डेटा पढ़ने के लिए नामित पाइप बना सकता है। या इसी तरह यदि आप अंततः फ़ाइल को पढ़कर प्रतिलिपि बनाते हैं, तो नामित पाइप केवल & लिखी गई सभी चीज़ों को अनदेखा कर सकती है जो दुर्भावनापूर्ण सामग्री को पढ़ने के लिए आपूर्ति करती है।
मुझे पिछले 10+ वर्षों में अस्थायी फ़ाइल हमलों के कई उदाहरणों को पढ़ना याद है जो नामस्थान में नाम प्रकट होने पर और वास्तव में फ़ाइल खोले जाने पर दौड़ की स्थिति का फायदा उठाते हैं।
उम्मीद है कि जावा सेट का उमास्क सही ढंग से है इसलिए एक कम विशेषाधिकार प्राप्त उपयोगकर्ता फ़ाइल को पढ़/लिख नहीं सकता है और आम तौर पर/tmp निर्देशिका अनुमतियों को ठीक से प्रतिबंधित करता है ताकि आप अनलिंक हमले नहीं कर सकें।
बेशक अगर आप अस्थायी फ़ाइल के लिए एक कस्टम निर्देशिका पास करते हैं जिसका स्वामित्व कम-विशेषाधिकार प्राप्त उपयोगकर्ता द्वारा स्वामित्व में है, तो उपयोगकर्ता आपके खिलाफ अनलिंक हमला कर सकता है। नर्क, इनोटिफाइ के साथ, केवल एक ब्रूट फोर्स लूप की तुलना में दौड़ की स्थिति का फायदा उठाना संभव है जो निर्देशिका सूची करता है।
क्या आप समझा सकते हैं कि दौड़ की स्थिति क्या मौजूद है? –
इस पर कोई अपडेट (वर्कअराउंड या जावा 7 चाल के रूप में)? –
@Mr_and_Mrs_D मैंने अभी एक वास्तविक उत्तर जोड़ा है। – OrangeDog