सबसे पहले आपको सुरक्षा खतरों को निर्धारित करने के लिए अपने संदर्भ को समझने की आवश्यकता है। (जब मैं "ट्रस्ट" के बारे में बात करता हूं, तो मैं थोड़ा छोटा कटौती कर रहा हूं। मैं जानबूझकर दुर्भावनापूर्ण बात कर रहा हूं।)
यदि धारावाहिक डेटा बनाया गया था, उसी ट्रस्ट के साथ रखा और पढ़ा गया था, तो कोई भी नहीं है वास्तविक समस्या (मानक बग के अलावा)। ध्यान दें कि यदि आप कोई संवेदनशील जानकारी लिखते हैं, तो धारावाहिक डेटा भी संवेदनशील है (यह स्पष्ट प्रतीत होता है, लेकिन वहाँ एक उचित मात्रा में संकेत है)।
यदि धारावाहिक डेटा किसी भी कारण से अविश्वसनीय है, तो विचार करने के लिए थोड़ा और कुछ है। पुनर्निर्मित वस्तुओं की आंतरिक संरचना "असामान्य" हो सकती है। डेटा संगत नहीं हो सकता है। आपने म्यूटेबल ऑब्जेक्ट्स साझा किए हैं जो अलग होना चाहिए। Deserialisation एक अनंत लूप, या एक गैर अनंत लूप का कारण बन सकता है जो ब्रह्मांड की गर्मी की मृत्यु से पहले पूर्ण नहीं होने वाला होता है। और निश्चित रूप से डेटा झूठ बोल सकता है।
आप जो कम विश्वसनीय कोड द्वारा किया जाता है पुस्तकालय कोड लिख रहे हैं, तो चीजें और दिलचस्प हो जाता:
"कैलेंडर बग" (और इसी तरह) के मामले में, जो दुर्भावनापूर्ण साथ एक मनमाना धारा deserialising के बारे में है डेटा और दुर्भावनापूर्ण कोड। जावा सिक्योर कोडिंग दिशानिर्देश कस्टम readObject
विधियों के भीतर सुरक्षा जांच ("जावा 2 सुरक्षा मॉडल" का उपयोग करके) करने का सुझाव देते हैं, जिसका अर्थ है कि आपको कोड और डेटा की तुलना में अधिक विश्वास के साथ deserialisation को कॉल नहीं करना चाहिए।
deserialisable वस्तुओं के पक्ष से, चीजें अधिक मुश्किल हैं। ObjectInputStream
द्वारा readObject
, readUnshared
, defaultReadObject
, readFields
या केवल डिफ़ॉल्ट deserialisation द्वारा दुर्भावनापूर्ण कोड द्वारा कब्जा कर लिया गया संदर्भ हो सकता है, या गैर-अंतिम कक्षाओं के लिए, दुर्भावनापूर्ण subclassed हो सकता है। आंशिक रूप से प्रारंभ होने पर, एक वस्तु का उपयोग deserialisation के दौरान भी किया जा सकता है। Deserialisation deserialised वर्ग के एक "वास्तविक" कन्स्ट्रक्टर का आह्वान नहीं करता है (readObject
/readObjectNoData
एक प्रकार का psuedo-constructor है, जो final
एस सेट नहीं कर सकता है)। यह सब एक दुःस्वप्न है, इसलिए आप शायद अपने संवेदनशील वर्गों को क्रमबद्ध नहीं बनाना चाहते हैं।
क्रमबद्धरण और deserialisation के कार्यान्वयन में कई भेद्यताएं रही हैं। आपको इसके बारे में चिंता करने की ज़रूरत नहीं है, जब तक कि आप इसे स्वयं लागू नहीं कर लेते।
एक पूरी तरह से पूर्ण जवाब +1 –